我目前正在学习 WPF 以及使用 MultiTrigger 和 Conditions 来设置样式化控件的一些属性。我知道 MultiTrigger 的 Conditions 必须全部满足(AND-Operator)才能设置 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 中归档这样的东西?是否有 NotCondition-Element 或 Condition-Element 上的 Attribute 来否定比较?
最佳答案
在这种使用颜色的特殊情况下,您可以使用触发器优先级。例如
<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
希望对你有帮助
关于.net - 多重触发的否定或非条件元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2324875/