WPF是需要用到触发器来帮助完成的,其次大家想到触发器,必定也应该想到控件模板,因为在控件模板的情况下才会用到触发器,所以在ControlTemplate控件又包含了两个重要的属性:第一个是:VisualTree,该模板的视觉树,其实我们就是使用这个属性来描述控件的外观的。第二种是:Triggers,触发器列表,里面包含一些触发器Trigger,我们可以定制这个触发器列表来使控件对外界的刺激发生反应,比如鼠标经过时文本变成粗体等。触发器然而有三种基本类型的WPF触发器:属性触发器、数据触发器以及事件触发器。
属性触发器Property Trigger:当Dependency Property的值发生改变时触发。
数据触发器Data Trigger: 当普通.NET属性的值发生改变时触发。
事件触发器Event Trigger: 当路由时间被触发时调用。
如下结构图所示:
1、属性触发器(Property Trigger):无论何时只要依赖属性值改变了,wpf 就会自动根据属性的元素数据触发一系列动作,这些动作可以重新呈现适当的元素、更新当前布局、刷新数据绑定等。内建的变更通知最有趣的特性之一是属性触发器,它可以在属性值改变时执行自定义动作,而不用更改任何过程式代码。
下边的例子设置了当鼠标放置于按钮之上悬停时,按钮的外表会发生变化。注意,属性触发器是用Trigger标识的。
在上面的代码中注意到<ControlTemplate.Triggers>... </ControlTemplate.Triggers>之间的部分(图未截完整)。我们定义了触发器 <Trigger Property="IsMouseOver" Value="True">,其表示当我们Button的IsMouseIOver属性变成TRUE时,将使用设置器<Setter Property=”Background” value=”# FF0CC030”>来将button的background属性设置为#FF0CC030,相反,当button的IsMouseOver属性变成false时,设置器中设置的属性将恢复原值。
2、事件触发器(EventTrigger):事件触发器是在某个事件被触发时来调用这个触发器的相关操作。因为WPF提供了用XAML来标记对象,事件等,所以其提供了一些在普通.NET开发中看似没用的属性例如IsMouseOver, IsPressed等,这是为了XAML来用的,使其可以很方便的通过某个属性来判断状态,也方便了Property Trigger的应用。在特定的路由事件发生时被触发,主要用于动画。
以下示例演示了如何应用Event Trigger鼠标按钮事件。
3、数据触发器(Data Trigger):在WPF中我们可以为自己的数据定制显示方式,也就是说虽然某数据数据是一定的,但我们可以做到让它的表现方式多种多样,根据绑定的数据不同显示不同的内容。数据触发器和属性触发器除了面对的对象类型不一样外其他的完全相同。而且数模板适用于Content Control类控件与Iterms Control类控件。
具体代码参考提供如下图所示