(1)屬性觸發器:其對應的類是Trigger。它在特定關聯屬性發生變化時被觸發。一個屬性的更改會在另一個屬性中觸發即時或動態更改。
(2)數據觸發器:其對應的類是DataTrigger。它在特定的CLR類型所記錄的值發生變化時被觸發。事件會在屬性中觸發動態更改。
(3)事件觸發器:其對應的類是EventTrigger。它將在特定的路由事件發生時被觸發。但這類操作僅限於動畫。
在WPF中,每一個可以使用觸發器的類中都會有一個Triggers屬性。擁有這個屬性的類有:FrameworkElement,Style,DataTemplate和ControlTemplate。但是需要注意的是,FrameworkElement類只支持EventTrigger。這是因為微軟還沒有完成它對其他兩類觸發器的支持。如果程序中需要使用屬性觸發器或數據觸發器的功能,軟件開發人員就需要使用設置樣式觸發器的方法對觸發器進行一次包裝,再將該樣式應用在FrameworkElement類的實例上。因此就現在來說,Trigger和EventTrigger僅可以用在控件模板或樣式中,而DataTrigger則只能用在數據模板之中。因此在這里所講解的對觸發器的應用僅限於對Trigger元素的直接使用,而並不涉及其他復雜的使用。
同時,為了支持對復雜觸發條件的表示,WPF還引入了MultiTrigger和MultiDataTrigger完成對與邏輯的支持。如果想用觸發器表示或邏輯,軟件開發人員可以通過將多個觸發器同時放置到Triggers屬性中完成。
一:屬性觸發器
<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> <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>
二:數據觸發器
<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>
三:事件觸發器
<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>
