触发器
- [1. 概述](#1. 概述)
- [2. 详解](#2. 详解)
-
- [2.1. Trigger 用法](#2.1. Trigger 用法)
- [2.2. MultiTrigger 用法](#2.2. MultiTrigger 用法)
- [2.3. DataTrigger 用法](#2.3. DataTrigger 用法)
- [2.4. EventTrigger 用法](#2.4. EventTrigger 用法)
- 总结
1. 概述

官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.trigger?view=netframework-4.8
2. 详解
在Style中可以指定触发器类型,触发器分为以下几种
类型 | 说明 |
---|---|
Trigger | 触发器,在满足一个条件时应用属性值或执行操作的触发器。 |
MultiTrigger | 多触发器,在满足多个条件时应用属性值或执行操作的触发器 。 |
DataTrigger | 数据触发器,它会在绑定数据满足指定条件时应用属性值或执行操作。 |
EventTrigger | 事件触发器,在某个事件发生时应用属性值或执行操作。 |
2.1. Trigger 用法
Trigger 类表示触发器在满足一个条件时应用属性值或执行操作,其部分属性和代码示例如图如下
属性 | 说明 |
---|---|
Property | 获取或设置一个属性,该属性返回要与触发器的 Value 属性进行比较的值。该比较是一项引用相等性检查。 |
Value | 获取或设置要与元素的属性值进行比较的值。该比较是一项引用相等性检查。 |
Setters | 获取 Setter 对象的集合,这些对象描述当满足指定条件时要应用的属性值。 |

xml
<Window.Resources>
<Style TargetType="Button" >
<!--单条件触发,鼠标移入-->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="251,110,0,0" VerticalAlignment="Top" Height="171" Width="320"/>
</Grid>
2.2. MultiTrigger 用法
MultiTrigger 类表示在满足多个条件时应用属性值或执行操作,,其部分属性和代码示例如图如下
属性 | 说明 |
---|---|
Conditions | 当鼠标左键或空格键在按钮上按下时为true,否则false。 获取或设置触发器的多个条件。 |
Setters | 获取 Setter 对象的集合,这些对象描述当满足指定条件时要应用的属性值。 |

xml
<Window.Resources>
<Style TargetType="Button" >
<!--多条件触发,鼠标移入和点击-->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsPressed" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Yellow"/>
<Setter Property="FontSize" Value="40"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="251,110,0,0" VerticalAlignment="Top" Height="171" Width="320"/>
</Grid>
2.3. DataTrigger 用法
DataTrigger 触发器会在绑定数据满足指定条件时应用属性值或执行操作。部分属性和代码示例如图
属性 | 说明 |
---|---|
Binding | 获取或设置产生数据对象的属性值的绑定,该属性返回要与触发器的 Value 属性进行比较的值。 |
Value | 获取或设置要与元素的属性值进行比较的值。该比较是一项引用相等性检查。 |
Setters | 获取 Setter 对象的集合,这些对象描述当满足指定条件时要应用的属性值。 |

xml
<Grid>
<CheckBox x:Name="checkBox" Content="大号字体" HorizontalAlignment="Left" Margin="269,84,0,0" VerticalAlignment="Top" Height="26" Width="119"/>
<!--设置默认字体大小后,会让样式里面的Setter属性不生效,其他属性同理-->
<TextBox Text="你猜字体会不会变大" Foreground="Red" HorizontalAlignment="Left" Height="101" Margin="269,162,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="268">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=checkBox, Path=IsChecked}" Value="true">
<!--DataTrigger.Setters可省略-->
<Setter Property="FontSize" Value="28"/>
<Setter Property="Foreground" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
2.4. EventTrigger 用法
EventTrigger是事件触发器,应用一组操作影响一个事件。其部分属性和代码示例如图如下,既演示将EventTrigger写在Window.Resource内,又演示写在控件内。
属性 | 说明 |
---|---|
RoutedEvent | 获取或设置将激活该触发器的 RoutedEvent。 |
Actions | 获取事件发生时要应用的操作的集合。 |

xml
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="269,291,0,0" VerticalAlignment="Top" Height="35" Width="51">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<!--也可只写RoutedEvent="MouseEnter"-->
<EventTrigger RoutedEvent="Button.MouseEnter" >
<!--调用动画的故事板-->
<BeginStoryboard>
<Storyboard>
<!--DoubleAnimation的重要内容,From (值从哪里开始), 包含To (值到哪里结束), Duration (值的变化经过多少时间)-->
<!--本处省略了From (值从哪里开始),TargetProperty为控件的Width,Duration内参数为时分秒,在1.5s内达到300-->
<DoubleAnimation To="300" Duration="0:0:1.5" Storyboard.TargetProperty="Width"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
总结
- 触发器既可以写在Window.Resource内,又可以写在控件内。