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

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

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

【问题讨论】:

    标签: c# wpf triggers datatrigger multidatatrigger


    【解决方案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。你知道怎么做吗?
      • 想通了,将您的答案标记为正确,然后我将发布我在相同情况下用于其他任何人的代码隐藏版本。
      猜你喜欢
      • 2011-09-06
      • 2016-11-26
      • 2011-08-11
      • 1970-01-01
      • 2013-02-16
      • 2011-07-25
      • 2015-10-20
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多