WPF触发器:当属性和数据值均为true时

11

当一个属性和数据值为 true 时,我需要能够更改控件的 Style。例如,我的绑定数据有一个 IsDirty 属性。当 IsDirty 为 true 且该控件被选中时,我想要更改该控件的背景颜色。我找到了 MultiTriggerMultiDataTrigger 类...但在这种情况下,我需要以某种方式触发数据和属性。我该怎么做?

另外需要注意的是:我需要能够在代码后端而不是 XAML 中实现此功能。

2个回答

20

MultiDataTrigger对于依赖属性和普通属性同样有效。只需将绑定中的Path设置为你的依赖属性的名称。

但是,你需要小心设置该绑定的源,因为默认情况下,源是附加触发器的元素的DataContext。如果触发器在可选择对象的样式中使用,可以使用Binding的RelativeSource属性:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding Path=IsDirty}" Value="True" />
      <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
    </MultiDataTrigger.Conditions>
    <Setter Property="Background" Value="Cyan" />
  </MultiDataTrigger>

可以举个例子吗?抱歉我对WPF还不太熟悉。 - KrisTrip
我实际上需要在代码后台为我的特定情况执行此操作。我唯一无法弄清楚的部分是如何指定RelativeSource Self。你知道怎么做吗? - KrisTrip
搞定了,将你的答案标记为正确,然后我会发布我用于其他处于相同情况的人的代码版本。 - KrisTrip

0
这是我在代码后端实际所做的方式:
new MultiDataTrigger
{
    Conditions = 
    {
        new Condition
        {
            Binding = new Binding("IsDirty"),
            Value = true
        },
        new Condition
        {                                                    
            Binding = new Binding("IsSelected") { RelativeSource = RelativeSource.Self },
            Value = true
        }
    },

    Setters =
    {
        new Setter
        {
            Property = Control.BackgroundProperty,
            Value = Brushes.Pink
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接