3

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

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

如果鼠标悬停在控件上且内容为'Hello World',则应将 Background-Property 设置为'Red ' 。另一种情况是,如果鼠标悬停并且内容不是'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 中存档这样的内容?Condition-Element 上是否有 NotCondition-Element 或 Attribute 来否定比较?

4

1 回答 1

4

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

<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

希望这可以帮助

于 2010-02-24T09:52:16.360 回答