【问题标题】:Negate or Not Condition-Element for MultiTriggerMultiTrigger 的否定或非条件元素
【发布时间】:2010-02-24 09:27:38
【问题描述】:

我目前正在学习 WPF 和使用 MultiTrigger 和条件来设置样式控件的一些属性。我知道 MultiTrigger 的条件必须全部满足(AND 运算符)才能设置 Setter 指定的值。

但是如果不满足值是否存在条件(让我们将其命名为 NotCondition)。我有一个小例子来说明我的意思。

如果鼠标在控件上方且内容为'Hello World',则背景属性应设置为'Red' . 另一种情况是,如果鼠标悬停并且内容是not 'Hello World',那么背景应该是'Blue '.

 <MultiTrigger>
   <MultiTrigger.Conditions>
     <Condition Property="IsMouseOver" Value="True" />
     <Condition Property="Content" Value="Hello World" />
   </MultiTrigger.Conditions>
   <Setter Property="Background" Value="Red"/>
 </MultiTrigger>
 <MultiTrigger>
   <MultiTrigger.Conditions>
     <Condition Property="IsMouseOver" Value="True" />
     <!--<NotCondition Property="Content" Value="Hello World" />-->
   </MultiTrigger.Conditions>
   <Setter Property="Background" Value="Blue"/>
 </MultiTrigger>

我如何在 WPF/XAML 中存档这样的内容?是否有 NotCondition-Element 或 Condition-Element 上的 Attribute 来否定比较?

【问题讨论】:

    标签: .net wpf xaml triggers conditional-statements


    【解决方案1】:

    在这种颜色的特殊情况下,您可以使用触发器优先级。例如

    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="Background" Value="Blue"/>
    </Trigger>
    <MultiTrigger>
     <MultiTrigger.Conditions>
      <Condition Property="IsMouseOver" Value="True"/>
      <Condition Property="Text" Value="Hello world"/>
     </MultiTrigger.Conditions>
     <Setter Property="Background" Value="Red"/>
    </MultiTrigger>
    

    当鼠标悬停且文本为 Hello world 时,最新触发器会覆盖第一个触发器的效果。

    WPF 中没有任何内置功能可以让您执行条件触发器,但是 Mike Hillberg 为这个问题提出了一个非常有趣的解决方案:A Comparable DataTrigger

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2020-03-04
      • 2014-05-18
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多