c# - 将属性绑定(bind)到依赖属性时,触发器不起作用

标签 c# wpf xaml data-binding triggers

我正在尝试使用触发器设置矩形 (WPF) 的颜色,具体取决于 bool DependencyProperty,我将其绑定(bind)到矩形的 Tag 属性。

我有以下代码:

 public partial class MainWindow : Window
 {
    public Boolean isAutoStart
    {
        get { return (Boolean)GetValue(isAutoStartProperty); }
        set { SetValue(isAutoStartProperty, value); }
    }

    public static readonly DependencyProperty isAutoStartProperty =
        DependencyProperty.Register("isAutoStart", typeof(Boolean),
        typeof(MainWindow), new PropertyMetadata(true));

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
       isAutoStart = false;
    }
 }

在 XAML 中:

<Window.Resources>
    <Style x:Key="TriggerDark" TargetType="Rectangle">
        <Setter Property="Fill" Value="Green" />
        <Style.Triggers>
            <Trigger Property="Tag" Value="False">
                <Setter Property="Fill" Value="Red" />
            </Trigger>
            <Trigger Property="Tag" Value="True">
                <Setter Property="Fill" Value="Green" />
            </Trigger>
        </Style.Triggers>
    </Style>

</Window.Resources>

<Rectangle Style="{StaticResource ResourceKey=TriggerDark}" Tag="{Binding Path=isAutoStart, UpdateSourceTrigger=PropertyChanged}">

如果我将“True”或“False”硬编码到矩形的标记属性中,触发器将正常工作。 如果我在运行时将标签属性的值打印到控制台,则绑定(bind)有效,但触发器不会触发。

知道我做错了什么吗?

谢谢!

最佳答案

您的触发器尝试将 bool 值 true 与字符串“True”进行比较,因为 Tag 是一个对象属性,因此将存储 bool 值,而您的触发器的值是一个字符串。 PHP 会喜欢它,而不是 WPF。 ;)

如果您想保留 Trigger 而不是 DataTrigger,您可以创建一个静态类:

public static class BooleanHelper {
    public static bool False {
        get { return false; }
    }
    public static bool True {
        get { return true; }
    }
}

然后Style会写成:

<Style x:Key="TriggerDark" TargetType="Rectangle">
    <Setter Property="Fill" Value="Green"/>
    <Style.Triggers>
        <Trigger Property="Tag" Value="{x:Static local:BooleanHelper.True}">
            <Setter Property="Fill" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

归功于 Michael Mairegger关于这个想法。

关于c# - 将属性绑定(bind)到依赖属性时,触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245529/

相关文章:

c# - 在 onChange 事件中从动态创建的 RichTextBox 中获取文本

c# - 使用 RightFax 在 C# 中获取 'System.AccessViolationException' 异常

c# - 从 Excel 书籍中读取两列到 Dictionary<ID,string>?

c# - 服务器可以使用来自客户端的文件而不将其上传到服务器吗?网络

c# - 应用程序设置绑定(bind)最佳实践

c# - 如何实现带图像但没有边框的按钮?

c# - 如何在 Silverlight 中为组单选按钮设置数据绑定(bind)?

c# - 是否可以绑定(bind)对象列表?

c# - 设置密码框的初始值

wpf自定义TabControl