首页 > Windows开发 > 详细

WPF 单个触发器、多个触发器、多条件触发器

时间:2019-04-09 23:36:48      阅读:159      评论:0      收藏:0      [点我收藏+]

Trigger的使用。利用Trigger对象,我们可以接收到属性变化或者事件发生,并据此做出适当的响应。Trigger本身也是支持多种类型的,下面是一个属性Trigger的例子:

<Style TargetType="ListBoxItem">
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Opacity" Value="1.0" />
<!--其他的Setters->
</Trigger>
</Style.Triggers>
</Style>

 

这段代码设置ListBoxItem的Opacity属性的默认值为0.5。但是,在IsSelected属性为True时,ListBoxItem的Opacity属性值为1。从上面的代码还可以看出,在满足一个条件后,可以触发多个行为(定义多个Setters)。同样地,上面的Triggers也是一个集合,也可以添加多个Trigger。

注意上面的多个Trigger是相互独立的,不会互相影响。另一种情况是需要满足多个条件时才触发某种行为。为此,WPF提供了MultiTrigger以满足这种需求。比如:

<Style TargetType="{x:Type Button}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="Content" Value="{x:Null}" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Yellow" />
</MultiTrigger>
</Style.Triggers>
</Style>

 

这就表示只有IsMouseOver为True、Content为NULL的时候才将Background设置为Yellow。

以上的Trigger都是基于元素属性的。对于鼠标移动等事件的处理;

WPF有专门的EventTrigger。但因EventTrigger多数时候是和Storyboard配合使用的;

现在所讨论的Trigger都是基于属性的值或者事件的。

温馨提醒:

对于小的应用程序,这个ControlTemplate一般直接定义在XAML的根元素。对于大的应用程序,通常应该定义在专门的资源XAML文件中,根元素是ResourceDictionary。

不管定义在什么地方,除了前面用Style定义外观,以及用Resource实现元素重用外

<ControlTemplate x:Key="templateThermometer" TargetType="{x:Type ProgressBar}">
<ControlTemplate.Resources> 
<RadialGradientBrush x:Key="brushBowl"
GradientOrigin="0.3 0.3">
<GradientStop Offset="0" Color="Pink" />
<GradientStop Offset="1" Color="Red" /> 
</RadialGradientBrush>
</ControlTemplate.Resources>
<!-- 忽略其他相关内容-->
</ControlTemplate>

 

WPF 单个触发器、多个触发器、多条件触发器

原文:https://www.cnblogs.com/Im-Victor/p/10680583.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!