WPF样式的触发器
EventSetter:当事件触发的时候会执行Handler的事件处理程序
样式的触发器:
使用触发器可自动完成简单的样式的改变,不需要使用代码,也可以完成不少工作。
触发器通过Style.Trigger集合链接到样式。每个样式可以有任意多个触发器。每个触发器都是System.Windows.TriggerBase的实例。
TriggerBase的子类
名称 | 说明 |
Trigger | 这是一种最简单的触发器。可以监测依赖项属性的变化,然后设置器改变样式。 |
MultiTrigger | 与Trigger类似,但这种触发器联合了多个条件。只有满足了所有这些条件,才会启动触发器。 |
DataTrigger | 这种触发器使用数据绑定,与Trigger类似,只不过监视的是任意绑定数据的变化。 |
MultiDataTrigger | 联合多个数据触发器。 |
EventTrigger | 这是最复杂的触发器。当事件发生时,这种触发器应用动画。 |
简单的触发器(Trigger)
可为任何依赖项属性关联简单触发器。例如,可通过相应Control类的IsFocused、IsMouseOver以及IsPressed属性的变化,创建鼠标悬停效果和焦点效果。
每个触发器都制定了正在监视的属性以及正在等待的属性值。当属性值出现时,将应用Trigger.Setters集合里的设置器。
<Window.Resources>
<Style x:Key="BigFontButton">
<Style.Setters>
<Setter Property="Control.FontFamily" Value="Times New Roman"/>
<Setter Property="Control.FontSize" Value="18"/>
<Setter Property="Control.FontWeight" Value="Bold"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value="True"> //检测是否聚焦,然后执行改变前景色
<Setter Property="Control.Foreground" Value="DarkRed"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
MultiTrigger
根据多个条件触发<Style.Triggers>
<MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Property="Control.IsFocused" Value="true"/> <Condition Property="Control.IsMouseOver" Value="true"/> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Control.Foreground" Value="DarkRed"/> </MultiDataTrigger.Setters> </MultiDataTrigger> </Style.Triggers>
DataTrigger(数据触发器)
根据绑定的数据内容的值内容触发
<Style.Triggers>
<DataTrigger Binding="{Binding Button.Text }" Value="hello">
<Setter Property="Foreground" Value="Red"> </Setter>
</DataTrigger>
</Style.Triggers>
MultiDataTrigger跟MultiTrigger同理
事件触发器
<Style.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:3" Storyboard.TargetProperty="FontSize" To="50"/> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <EventTrigger RoutedEvent="Mouse.MouseLeave"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:3" Storyboard.TargetProperty="FontSize"/> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Style.Triggers>