使用觸發器
觸發器可以讓我們的界面可以自動化完成一些簡單的樣式改變,如鼠標放上去變色等。
在樣式中添加觸發器就是往 Style.Triggers 集合裏面添加觸發器,只要是派生自 TriggerBase 的實例都是可以添加到集合中的,有下面幾類
注意,我們可以爲任何依賴項屬性設置一個觸發器,我們看下面的例子
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="DarkBlue"></Setter>
</Trigger>
</Style.Triggers>
</Style>
從本質上來說,觸發器也是決定依賴項屬性值的一個因素,我們之前學過很多因素決定了依賴項屬性的值。
觸發器的生效順序
如果一個操作會觸發兩個觸發器,最後哪個觸發器生效無關乎事件的發生順序而是在於觸發器寫的先後順序。我們看一個例子
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Foreground" Value="DarkBlue"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
當我們按下鼠標的時候,按鈕也會獲取焦點,而在上面的例子的順序中因爲 IsPressed 觸發器在下面,所以按下鼠標的時候,IsPressed覆蓋了上面的觸發器,顏色顯示紅色,但是如果調換兩個觸發器的位置,再按下按鈕,顏色就不會變成紅色了。
這就是我們說的,哪個觸發器生效無關乎事件觸發順序而是在於觸發器寫的順序。
多觸發器
如果我們需要幾個條件同時滿足才觸發某條件,我們就需要使用多觸發器,如下
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="True"></Condition>
<Condition Property="IsMouseOver" Value="True"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="DarkRed"/>
</MultiTrigger.Setters>
</MultiTrigger>
事件觸發器
我們之前講的觸發器等待依賴項屬性發生變化,事件觸發器等待事件激發,其使用方法如下:
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
上面的事件觸發器定義了一個動畫,事實上事件觸發器在樣式中很重要的一個用途就是與動畫結合,我們在學習動畫的時候會繼續討論有關於事件觸發器應用的相關知識。