觸發器能夠在改變屬性值的時候,根據值變化執行操作,在不需要創建一個新的控件的情況下,可以動態的改變控件的外觀,當條件滿足時,觸發器可以改變任何屬性的值,觸發器通常定義在Style中,在窗體的根節點下被應用到指定的控件
Property Triggers
在Triggers集合中一個Trigger對象,當Trigger中定義的條件滿足時,則會觸發相應的操作,下面例子當鼠標移動到按鈕上時,鼠標會變成手狀態
<Window x:Class="Example_07.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Example_07" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"><Window.Resources><Style TargetType="Button"><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Cursor" Value="Hand" /></Trigger></Style.Triggers></Style></Window.Resources><Grid><Button Width="200" Height="100" Grid.Row="0" Grid.ColumnSpan="2">Hello World</Button></Grid>
</Window>
Data Triggers
Data Triggers 表示當綁定的數據滿足條件時,會執行相應操作,這里我們先做一個簡單的DataTrigger演示,當我們選中CheckBox時,會改變對應TextBlock中的值
<Window x:Class="Example_07.DataTriggerSample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Example_07" mc:Ignorable="d" Title="DataTriggerSample" Height="200" Width="300"><Window.Resources><Style TargetType="TextBlock"><Style.Triggers><DataTrigger Binding="{Binding ElementName=cbIsPass,Path=IsChecked}" Value="True"><Setter Property="Text" Value="Pass"></Setter><Setter Property="Foreground" Value="Green"></Setter><Setter Property="FontSize" Value="40"></Setter></DataTrigger><DataTrigger Binding="{Binding ElementName=cbIsPass,Path=IsChecked}" Value="False"><Setter Property="Text" Value="NO"></Setter><Setter Property="Foreground" Value="Red"></Setter><Setter Property="FontSize" Value="40"></Setter></DataTrigger></Style.Triggers></Style></Window.Resources><Grid><Grid.RowDefinitions><RowDefinition Height="20"></RowDefinition><RowDefinition Height="100"></RowDefinition></Grid.RowDefinitions><CheckBox Grid.Row="0" Name="cbIsPass" Content="是否通過" Width="100" Height="30"></CheckBox><TextBlock Grid.Row="1" TextAlignment="Center"></TextBlock></Grid>
</Window>
Event Triggers
事件觸發器表示當指定的事件觸發時,會執行對應的操作,事件觸發器一般應用在動畫中,下面例子演示鼠標移動到控件上時,字體會變大,當鼠標離開時,字體會恢復原始狀態
<Window x:Class="Example_07.EventTriggerSample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Example_07" mc:Ignorable="d" Title="EventTriggerSample" Height="450" Width="800"><Window.Resources><Style TargetType="TextBlock"><Style.Triggers><EventTrigger RoutedEvent="MouseEnter"><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimation Duration="0:0:3" Storyboard.TargetProperty="FontSize" To="100"/></Storyboard></BeginStoryboard></EventTrigger.Actions></EventTrigger><EventTrigger RoutedEvent="MouseLeave"><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimation Duration="0:0:3" Storyboard.TargetProperty="FontSize" To="18" /></Storyboard></BeginStoryboard></EventTrigger.Actions></EventTrigger></Style.Triggers></Style></Window.Resources><StackPanel VerticalAlignment="Center"><TextBlock Text="事件觸發器" TextAlignment="Center"></TextBlock></StackPanel>
</Window>
我們介紹了WPF常用的三種類型觸發器Trigger、DataTrigger、EventTrigger另外還有兩種多條件觸發器MultiTrigger、MultiDataTrigger滿足多個條件是觸發