在WPF中将Button绑定到布尔值

时间:2015-03-26 16:26:37

标签: c# wpf xaml awesomium mahapps.metro

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

以下是我用于按钮的XAML:

IsNavigating

请记住,我对WPF很新。

3 个答案:

答案 0 :(得分:4)

您需要创建一个这样的转换器:

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}}"

希望这有帮助!

答案 1 :(得分:1)

你需要编写一个简单的转换器才能做到这一点。快速搜索BooleanToVisibility转换器,你就会明白这一点。

答案 2 :(得分:0)

使用转换器是一种方法。但是,我指的是在viewmodel中使用触发器绑定到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> 

希望得到这个帮助。