WPF触发器

WPF提供了很重要的一个东西就是绑定Binding, 它帮助我们做了很多事情。对于Binding我们可以设置其绑定对象、关系,并通过某种规则去验证输入,或者转换值等等。触发器Trigger就给我们提供了很好的途径去结合这些元素

触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一个或多个条件执行Setter中的属性改变。因为复用的缘故,Styles是放置触发器的最好位置。但对于每个FrameworkElement来说都有Triggers集合,你也可以放在Triggers集合里

触发器有三种类型:

  1. 属性触发器Property Trigger:当Dependency Property的值发生改变时触发

属性触发器是WPF中最常用的触发器类型,因为我们前边说过依赖属性具有垂直变更通知的功能,所以在使用属性触发器时会很方便,而且因为WPF中每个控件超过2/3的属性都是依赖属性,所以它用到的场合更多。属性触发器是在当某个依赖属性的值发生变化时触发执行一个Setter的集合,当属性失去这个值时,这些被处罚执行的Setter集合会自动被撤销
例如,下边的例子设置了当鼠标放置于按钮之上悬停时,按钮的外表会发生变化。注意,属性触发器是用Trigger标识的

WPF触发器

    属性触发器还经常被用在做数据验证时用来显示验证错误信息,用属性触发器来判断是否有验证错误并显示相应验证错误信息的示例

 

  2.数据触发器Data Trigger 当普通.NET属性的值发生改变时触发

数据触发器和属性触发器除了面对的对象类型不一样外完全相同。数据触发器是来检测非依赖属性,也就是用户自定义的.NET属性的值发生变化时来触发并调用符合条件的一系列Setter集合,如下的示例演示了在绑定的ListBox里如果某个User对象符合某种特点(Role=Admin),则以突出方式显示这个对象。这里就用了DataTrigger,因为我们需要检测的是User对象的属性Role,这个对象是自定义的非可视化对象并且其属性为普通.NET属性。

WPF触发器
主要的部分定义在了Style中,其针对的是每个ListBox的项,当其被绑定的数据的属性Role为Admin时,突出显示:

WPF触发器

3、事件触发器Event Trigger: 当路由时间被触发时调用

事件触发器,顾名思义是在某个事件被触发时来调用这个触发器的相关操作。因为WPF提供了用XAML来标记对象、事件等,所以其提供了一些在普通.NET开发中看似没用的属性例如IsMouseOver,IsPressed等,这是为了XAML来用的,使其可以很方便的通过某个属性来判断状态,也方便了Property Trigger的应用。而作为事件触发器来说,它所做的事情和Property Trigger类似,不过是它的内部不能是简单的Setter集合,而必须是TriggerAction的实例
如下示例演示了如何应用Event Trigger当鼠标点击按钮时,让按钮的阴影效果发生变化

WPF触发器