代码之家  ›  专栏  ›  技术社区  ›  Jehof

多触发器的否定或非条件元素

  •  3
  • Jehof  · 技术社区  · 15 年前

    我目前正在学习WPF,并使用多触发器和条件来设置样式化控件的一些属性。我知道多起重工的条件必须全部满足(和操作员)才能设置setter指定的值。

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

    background属性应设置为 “红色” 如果 鼠标结束 控件和内容是 “你好世界” . 另一种情况是,如果 鼠标结束 内容是 “你好世界” ,背景应该是 “蓝色” .

     <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元素或属性来取消比较?

    1 回复  |  直到 7 年前
        1
  •  4
  •   akjoshi HCP    7 年前

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

    <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>
    

    当鼠标悬停且文本为 你好世界 .

    在wpf中没有任何内置项允许您执行条件触发器, 但是 Mike Hillberg为这个问题提出了一个非常分散的解决方案: A Comparable DataTrigger

    希望这有帮助