WPF 觸發器讓樣式在條件滿足時自動套用 Setter,條件失效時自動還原。本章系統介紹五種觸發器類型:屬性、多重、多條件屬性、資料、多條件資料、事件觸發器,並說明優先順序與動畫整合要點。
監視依賴屬性達到指定值。範例:滑鼠移入按鈕時背景變黃。
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>

Style 屬性本身(會拋出例外)。Style.Triggers 下可放多個 Trigger,各自獨立評估。若多觸發器設定同一屬性,**最後宣告者優先**。
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow" /></Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="LightGreen" /></Trigger>

同時滿足滑鼠懸停與焦點時,背景為綠色(後宣告勝出)。
需所有條件同時滿足才觸發,使用 MultiTrigger + Condition。
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="Content" Value="{x:Null}" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Yellow" />
</MultiTrigger>

應用於井字遊戲:僅滑鼠懸停且格子為空時高亮。
監視任意 CLR 物件屬性(非依賴屬性),配合 Binding。常用於資料模板內容呈現。
<Style x:Key="CellTextStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=PlayerName}" Value="X">
<Setter Property="Foreground" Value="Red" /></DataTrigger>
<DataTrigger Binding="{Binding Path=PlayerName}" Value="O">
<Setter Property="Foreground" Value="Green" /></DataTrigger>
</Style.Triggers>
</Style>

DataTemplate 內元素),而非控制項 Style。INotifyPropertyChanged 通知機制;靜態資料無需實作。null 時條件自動判定為 false,避免例外。MultiDataTrigger 結合多個 Binding 條件(AND 邏輯)。範例:第 10 步且玩家為 O 時特效。
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=PlayerName}" Value="O" />
<Condition Binding="{Binding Path=MoveNumber}">
<Condition.Value><sys:Int32>10</sys:Int32></Condition.Value>
</Condition>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Yellow" />
</MultiDataTrigger>
需透過 XML 命名空間映射引入 sys:Int32 確保型別正確比對。
監視路由事件(如 Click),啟動動畫(Storyboard)。動畫在第 8 章詳細介紹。
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="White" />
<Style.Storyboards>
<ParallelTimeline Name="CellClickedTimeline" BeginTime="{x:Null}">
<SetterTimeline Path="(Button.Background).(SolidColorBrush.Color)">
<ColorAnimation From="Yellow" To="White" Duration="0:0:5" />
</SetterTimeline>
</ParallelTimeline>
</Style.Storyboards>
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginAction TargetName="CellClickedTimeline" />
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>

Background),否則執行期無效果。| 觸發器類型 | 監視目標 | 動作 |
|---|---|---|
| Property Trigger | 依賴屬性 | 設定屬性值 |
| MultiTrigger | 多個依賴屬性 (AND) | 設定屬性值 |
| DataTrigger | CLR 屬性 (Binding) | 設定屬性值 |
| MultiDataTrigger | 多個 Binding (AND) | 設定屬性值 |
| EventTrigger | 路由事件 | 啟動動畫 |
觸發器以宣告式方式賦予 UI 互動行為,極少或無程式碼,是 WPF 樣式系統的核心威力。