.net - 多重触发的否定或非条件元素

标签 .net wpf xaml triggers conditional-statements

我目前正在学习 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/

相关文章:

wpf - 如何将 DataRow 绑定(bind)到 TextBlock?

c# - 如何获取图像的一部分并将其用作单独的图像?

c# - 使用 Microsoft.Extensions.DependencyInjection,我可以解析类型并构造实例,同时提供额外的构造函数参数吗?

c# - .Net 应用程序的默认线程模型

c# - EF 中的动态搜索表达式问题

c# - 将图像移动到背景?

c# - 无法设置 TabControl 的样式

WPF自定义控件-如何对自定义控件进行单元测试?

c# - 为什么我的 C# 代码不能添加到列表中并显示它?

c# - XAML 中的 Materialise Design - 不适用于自定义 XAML 控件