当属性和数据值为真时 WPF 触发

Posted

技术标签:

【中文标题】当属性和数据值为真时 WPF 触发【英文标题】:WPF Trigger when Property and Data value are true 【发布时间】:2011-02-24 16:41:40 【问题描述】:

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

另一个注意事项:我需要能够在不是 XAML 的代码中执行此操作。

【问题讨论】:

【参考方案1】:

这是我在代码隐藏中的实际操作方式:

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
        
    

【讨论】:

【参考方案2】:

MultiDataTrigger 对 DependencyProperties 的作用与对普通属性的作用一样好。只需将绑定中的路径设置为依赖项属性的名称即可。

但是,您需要小心设置该绑定的源,因为默认情况下,源是触发器附加到的元素的 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 很陌生。 我实际上需要在代码隐藏中针对我的特定情况执行此操作。我无法弄清楚的唯一部分是如何指定RelativeSource Self。你知道怎么做吗? 想通了,将您的答案标记为正确,然后我将发布我在相同情况下用于其他任何人的代码隐藏版本。

以上是关于当属性和数据值为真时 WPF 触发的主要内容,如果未能解决你的问题,请参考以下文章

当应该为真时,Android Studio 改造响应返回布尔值为假

R:仅当同一列中的两行中的值为真时才将值添加到 [row,column]

ASP .Net MVC 应用程序:当 db-entity(“课程”)的布尔属性(“已观看”)为真时如何向用户显示

当条件为真时,Pandas将数据帧分成多个

如何将一个观察值与先前的观察值相乘,但仅当某个条件为真时

当其他可观察对象为真时,从可观察对象中获取项目