MultiTrigger的Ne​​gate或Not Condition-Element

时间:2010-02-24 09:27:39

标签: .net wpf xaml triggers conditional-statements

我正在学习WPF并使用MultiTrigger和Conditions来设置样式控件的一些属性。我知道MultiTrigger的条件必须满足(AND-Operator)来设置Setter指定的值。

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

如果鼠标在控件上并且内容为'Hello World',则后台属性应设置为'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中存档这样的内容?条件元素上是否有NotCondition元素或属性来否定比较?

1 个答案:

答案 0 :(得分:4)

在这种具有颜色的特殊情况下,您可以使用触发器优先级。 E.g。

<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

希望这有帮助

相关问题