使用触发器可以自动完成简单的样式改变,例如当一个属性发生变化时可以进行响应,并自动调整样式。
触发器通过Style.Triggers集合连接到样式,每个样式都可以有任意多个触发器,并且每个触发器都是System.Windows.TriggerBase的派生类的实例
继承自TriggerBase的类
Trigger 这是一个简单的触发器,它监视依赖项属性的变化,然后使用设置器改变样式
MultiTrigger 与Trigger类似,但是这种触发器联合了多个条件,只有满足了所有这些条件,才会出发
DataTrigger 这种触发器使用数据绑定,它与Trigger类似,只不过它监视的是所有绑定数据的变化
MultiDataTrigger 联合多个数据触发器
EventTrigger 这是最复杂的触发器,当一个事件发生时,这种触发器应用一个动画
可以为任何一个依赖项属性关联一个简单的触发器,例如可以通过响应Control类的IsFocused ,IsMouseOver以及IsPressed属性的变化,创建鼠标悬停效果和焦点效果
每个简单的触发器都指明了正在监视的属性,以及正在等待的属性值,当属性值出现时,将自动应用存储在Trigger.Setters集合中的设置器(但不能使用更复杂的触发器逻辑,例如,比较一个值,查看其是否处于某个范围,或执行一个计算等等。)
为了理解触发器的工作原理,需要记住依赖项属性,本质上,触发器是众多覆盖从依赖项属性返回的值的属性提供者之一,但原始 的属性(不管是本地设置的还是通过样式设置的)仍会保留,只要触发器被禁用,触发器之前的属性值就会再次生效。
事件触发器
偶普通的触发器等待一个属性发生变化,而事件触发器等待特定的事件被激发。
事件触发器要求用户提供一系列修改控件 的动作,这些动作通常被用于一个动画。
下面的事件触发器等待MouseEnter事件,然后动态改变按钮的FontSize属性从而形成动画效果,在0.2秒的时间内将字体放大到22个单位
<Style x:Key="BigFontButtonStyle">
<Style.Setters>
....
</Style.Setters>
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
...在这个示例中,使用了一个预先构建的DoubleAnimation类(和所有动画类一样,该类位于System.Windows.Media.Animation名称空间中)。DoubleAnimation类能够在一段给定的时间内将任何双精度数值增加(如FontSize属性值)逐渐改变为设定的目标值 ,在0.2秒的时间内改变22个单位
与属性触发器不同,如果希望元素返回到原始状态,需要反转事件触发器(这是因为默认的动画行为是:一旦动画完成就继续处于激活状态,从而保持最后的属性值)
行为:
理解行为模型
行为旨在封装了一些UI功能,从而可以不用编写代码就能够将其应用到元素上。从另一个角度来看,每个行为都为元素提供了一个服务,该服务涉及到监听几个不同事件并执行几个相关的操作。
http://www.cnblogs.com/ysisl/archive/2009/11/03/1595573.html