觸發器
- 1. 概述
- 2. 詳解
- 2.1. Trigger 用法
- 2.2. MultiTrigger 用法
- 2.3. DataTrigger 用法
- 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 對象的集合,這些對象描述當滿足指定條件時要應用的屬性值。 |
<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 對象的集合,這些對象描述當滿足指定條件時要應用的屬性值。 |
<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 對象的集合,這些對象描述當滿足指定條件時要應用的屬性值。 |
<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 | 獲取事件發生時要應用的操作的集合。 |
<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內,又可以寫在控件內。