在 WPF 中将按钮绑定到布尔值
Binding Button to Boolean in WPF
我对看似简单的 WPF 应用程序有疑问。我使用 MahApps.Metro 的 MetroWindow
作为我的主要 Window,它允许我将按钮放在 window 的顶部。按照他们的入门示例,我在 window 的顶部放置了几个按钮。其中一个按钮是刷新按钮,允许用户刷新另一个控件的内容 (Awesomium WebControl
)。我想做的是以某种方式将刷新按钮绑定到 WebControl
的 IsNavigating
属性(这是一个布尔值),以便在浏览器导航时按钮上的图像发生变化.
这是我用于按钮的 XAML:
<Button x:Name="C_BTN_Refresh" Click="C_BTN_Refresh_Click">
<StackPanel Orientation="Horizontal">
<Rectangle Width="15" Height="15" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_refresh}" />
</Rectangle.OpacityMask>
</Rectangle>
</StackPanel>
</Button>
请记住,我是 WPF 的新手。
您需要编写一个简单的转换器来执行此操作。快速搜索 BooleanToVisibility 转换器,您就会明白这一点。
您需要像这样创建一个转换器:
public class BoolVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后将转换器作为资源包含在您的视图中,如下所示:
<Window.Resources>
<ResourceDictionary>
<converters:BoolVisibilityConverter x:Key="BoolVisibilityConverter"/>
</ResourceDictionary>
</Window.Resources>
然后在你的按钮上这样使用:
Visibility="{Binding Path=IsNavigating, Converter={StaticResource BoolVisibilityConverter}}"
希望对您有所帮助!
使用转换器是一种可行的方法。但是,我指的是在视图模型中使用触发器绑定到 IsNavigating。
<Button x:Name="C_BTN_Refresh" Click="C_BTN_Refresh_Click">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsNavigating}" Value="True">
<Setter Property="UIElement.Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="False">
<Setter Property="UIElement.Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<StackPanel Orientation="Horizontal">
<Rectangle Width="15" Height="15" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" />
</Rectangle.OpacityMask>
</Rectangle>
</StackPanel>
</Button>
希望对您有所帮助。
我对看似简单的 WPF 应用程序有疑问。我使用 MahApps.Metro 的 MetroWindow
作为我的主要 Window,它允许我将按钮放在 window 的顶部。按照他们的入门示例,我在 window 的顶部放置了几个按钮。其中一个按钮是刷新按钮,允许用户刷新另一个控件的内容 (Awesomium WebControl
)。我想做的是以某种方式将刷新按钮绑定到 WebControl
的 IsNavigating
属性(这是一个布尔值),以便在浏览器导航时按钮上的图像发生变化.
这是我用于按钮的 XAML:
<Button x:Name="C_BTN_Refresh" Click="C_BTN_Refresh_Click">
<StackPanel Orientation="Horizontal">
<Rectangle Width="15" Height="15" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_refresh}" />
</Rectangle.OpacityMask>
</Rectangle>
</StackPanel>
</Button>
请记住,我是 WPF 的新手。
您需要编写一个简单的转换器来执行此操作。快速搜索 BooleanToVisibility 转换器,您就会明白这一点。
您需要像这样创建一个转换器:
public class BoolVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后将转换器作为资源包含在您的视图中,如下所示:
<Window.Resources>
<ResourceDictionary>
<converters:BoolVisibilityConverter x:Key="BoolVisibilityConverter"/>
</ResourceDictionary>
</Window.Resources>
然后在你的按钮上这样使用:
Visibility="{Binding Path=IsNavigating, Converter={StaticResource BoolVisibilityConverter}}"
希望对您有所帮助!
使用转换器是一种可行的方法。但是,我指的是在视图模型中使用触发器绑定到 IsNavigating。
<Button x:Name="C_BTN_Refresh" Click="C_BTN_Refresh_Click">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsNavigating}" Value="True">
<Setter Property="UIElement.Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="False">
<Setter Property="UIElement.Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<StackPanel Orientation="Horizontal">
<Rectangle Width="15" Height="15" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" />
</Rectangle.OpacityMask>
</Rectangle>
</StackPanel>
</Button>
希望对您有所帮助。