使用触发器
触发器可以让我们的界面可以自动化完成一些简单的样式改变,如鼠标放上去变色等。
在样式中添加触发器就是往 Style.Triggers 集合里面添加触发器,只要是派生自 TriggerBase 的实例都是可以添加到集合中的,有下面几类
注意,我们可以为任何依赖项属性设置一个触发器,我们看下面的例子
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="DarkBlue"></Setter>
</Trigger>
</Style.Triggers>
</Style>
从本质上来说,触发器也是决定依赖项属性值的一个因素,我们之前学过很多因素决定了依赖项属性的值。
触发器的生效顺序
如果一个操作会触发两个触发器,最后哪个触发器生效无关乎事件的发生顺序而是在于触发器写的先后顺序。我们看一个例子
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Foreground" Value="DarkBlue"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
当我们按下鼠标的时候,按钮也会获取焦点,而在上面的例子的顺序中因为 IsPressed 触发器在下面,所以按下鼠标的时候,IsPressed覆盖了上面的触发器,颜色显示红色,但是如果调换两个触发器的位置,再按下按钮,颜色就不会变成红色了。
这就是我们说的,哪个触发器生效无关乎事件触发顺序而是在于触发器写的顺序。
多触发器
如果我们需要几个条件同时满足才触发某条件,我们就需要使用多触发器,如下
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="True"></Condition>
<Condition Property="IsMouseOver" Value="True"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="DarkRed"/>
</MultiTrigger.Setters>
</MultiTrigger>
事件触发器
我们之前讲的触发器等待依赖项属性发生变化,事件触发器等待事件激发,其使用方法如下:
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
上面的事件触发器定义了一个动画,事实上事件触发器在样式中很重要的一个用途就是与动画结合,我们在学习动画的时候会继续讨论有关于事件触发器应用的相关知识。