在 WPF 中将按钮绑定到布尔值

Binding Button to Boolean in WPF

我对看似简单的 WPF 应用程序有疑问。我使用 MahApps.MetroMetroWindow 作为我的主要 Window,它允许我将按钮放在 window 的顶部。按照他们的入门示例,我在 window 的顶部放置了几个按钮。其中一个按钮是刷新按钮,允许用户刷新另一个控件的内容 (Awesomium WebControl)。我想做的是以某种方式将刷新按钮绑定到 WebControlIsNavigating 属性(这是一个布尔值),以便在浏览器导航时按钮上的图像发生变化.

这是我用于按钮的 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> 

希望对您有所帮助。