使用触发器可以自动完成简单的样式改变。
项目源码
触发器
在Style定义时使用Style.Triggers属性来实现:
<!--设置触发器-->
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value="True">
<!--获取焦点的时候,点击按钮-->
<Setter Property="Control.Foreground" Value="DarkRed"/>
</Trigger>
</Style.Triggers>
给按钮使用该Style及其触发器:
<Button Name="btn1" Content="Button" Margin="5" VerticalAlignment="Top" Style="{
StaticResource BigFontButton}"/>
当点击按钮,按钮获得焦点时,触发样式“前景色变为深红色”:
当鼠标点击下方TextBox时,按钮失去焦点,又变回触发之前的样式。
再设置一个触发器:
<Trigger Property="Button.IsPressed" Value="True">
<Setter Property="Control.Foreground" Value="Blue"/>
</Trigger>
则在按下的时候为蓝色,弹起为红色。
多触发器
设置满足多个触发条件时才触发控件的样式改变。利用MultiTrigger进行定义,用MultiTrigger.Conditions定义多个条件的集合,用MultiTrigger.Setters应用改变的样式:
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions><!--多个条件同时满足才触发-->
<Condition Property="Control.IsFocused" Value="True"/><!--获得焦点-->
<Condition Property="Control.IsMouseOver" Value="True"/><!--且鼠标在控件上悬浮-->
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Control.Foreground" Value="SkyBlue"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
结果,只有当按钮获取焦点且鼠标悬停与按钮上方时,才能应用触发器样式改变:
事件触发器
定义在鼠标进入和离开时用故事板动画改变字体的大小,使得大小的变化为逐渐变化,不是突变。使用EventTrigger属性进行改变:
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter"><!--事件触发器-->
<BeginStoryboard>
<Storyboard><!--故事板,可以让改变从小逐渐变大,而不是突然变大-->
<DoubleAnimation Duration="0:0:0.2" Storyboard.TargetProperty="FontSize" To="48"/>
<!--Duration表示花多少时间改变-->
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave"><!--事件触发器-->
<BeginStoryboard>
<Storyboard><!--故事板,可以让改变从小逐渐变大,而不是突然变大-->
<DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize" To="10"/>
<!--Duration表示花多少时间改变-->
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>