1:屬性觸發(fā)器;
2:數(shù)據(jù)觸發(fā)器;
3:事件觸發(fā)器;
Style、ControlTemplate 和 DataTemplate 都有觸發(fā)器集合。
屬性觸發(fā)器只檢查WPF從屬屬性,而數(shù)據(jù)觸發(fā)器則可檢查任何一種可綁定的屬性。屬性觸發(fā)器一般用來檢查WPF可視元素的屬性,而數(shù)據(jù)觸發(fā)器則通常用來檢查不可視對象的屬性。
屬性觸發(fā)器:通過此機(jī)制,一個屬性的更改會在另一個屬性中觸發(fā)即時或動態(tài)更改。
數(shù)據(jù)觸發(fā)器:通過此機(jī)制,事件會在屬性中觸發(fā)動態(tài)更改。
數(shù)據(jù)觸發(fā)器:EventTrigger,它根據(jù)事件的引發(fā)來啟動一組操作,但這類操作僅限于動畫。
一:屬性觸發(fā)器
查看代碼片段1:
<Style TargetType="ListBoxItem">
<Setter Property="Opacity" Value="0.5" />
<Setter Property="MaxHeight" Value="75" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Trigger.Setters>
<Setter Property="Opacity" Value="1.0" />
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style> 表示在ListBoxItem的IsSelected屬性變?yōu)門rue的時候,其另外一個屬性O(shè)pacity的值變?yōu)?.0。
1.1單個觸發(fā)器
代碼片段1就是單個觸發(fā)器。
1.2多個觸發(fā)器
可以為ListBoxItem設(shè)置多個觸發(fā)器。
1.3多條件屬性觸發(fā)器
多條件觸發(fā)器就是說,同時滿足幾個條件的時候才觸發(fā)行為。
如代碼片段2:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="True"></Condition>
<Condition Property="Content" Value="{x:Null}"></Condition>
</MultiTrigger.Conditions>
<Setter Property="ToolTip" Value="content is null!"></Setter>
</MultiTrigger>二:數(shù)據(jù)觸發(fā)器
使用 DataTrigger,可以在數(shù)據(jù)對象的屬性值與指定的 Value 匹配時設(shè)置屬性值。例如,在顯示 Employee 對象列表時,可能希望前景色根據(jù)每個 Employee 的當(dāng)前出勤情況而變化。(例如,用紫色前景色顯示當(dāng)前正在休假的 Employee。)
查看代碼片段3
<Window.Resources>
<c:Places x:Key="PlacesData"/>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=State}" Value="WA">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name}" Value="Portland" />
<Condition Binding="{Binding Path=State}" Value="OR" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Cyan" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
<DataTemplate DataType="{x:Type c:Place}">
<Canvas Width="160" Height="20">
<TextBlock FontSize="12"
Width="130" Canvas.Left="0" Text="{Binding Path=Name}"/>
<TextBlock FontSize="12" Width="30"
Canvas.Left="130" Text="{Binding Path=State}"/>
</Canvas>
</DataTemplate>
</Window.Resources>
<StackPanel>
<TextBlock FontSize="18" Margin="5" FontWeight="Bold"
HorizontalAlignment="Center">Data Trigger Sample</TextBlock>
<ListBox Width="180" HorizontalAlignment="Center" Background="Honeydew"
ItemsSource="{Binding Source={StaticResource PlacesData}}"/>
</StackPanel>2.1單條件觸發(fā)
以上的DataTrigger就是一個單條件觸發(fā)器。
2.2多條件觸發(fā)
以上的MultiDataTrigger就是一個多條件觸發(fā)器。
三:事件觸發(fā)器
屬性觸發(fā)器用來檢查從屬屬性的值,數(shù)據(jù)觸發(fā)器用來檢查CLR屬性的值,而事件觸發(fā)器用來監(jiān)視事件。當(dāng)一個事件發(fā)生的時候,事件觸發(fā)器就會通過引發(fā)相關(guān)的動畫事件來響應(yīng)。
如代碼片段4:
<Style TargetType="ListBoxItem">
<Setter Property="Opacity" Value="0.5" />
<Setter Property="MaxHeight" Value="75" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Trigger.Setters>
<Setter Property="Opacity" Value="1.0" />
</Trigger.Setters>
</Trigger>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="MaxHeight"
To="90" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:1"
Storyboard.TargetProperty="MaxHeight" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>