1. 程式人生 > 其它 >WPF樣式的觸發器

WPF樣式的觸發器

EventSetter:當事件觸發的時候會執行Handler的事件處理程式

樣式的觸發器:

使用觸發器可自動完成簡單的樣式的改變,不需要使用程式碼,也可以完成不少工作。 觸發器通過Style.Trigger集合連結到樣式。每個樣式可以有任意多個觸發器。每個觸發器都是System.Windows.TriggerBase的例項。 TriggerBase的子類
名稱 說明
Trigger 這是一種最簡單的觸發器。可以監測依賴項屬性的變化,然後設定器改變樣式。
MultiTrigger 與Trigger類似,但這種觸發器聯合了多個條件。只有滿足了所有這些條件,才會啟動觸發器。
DataTrigger 這種觸發器使用資料繫結,與Trigger類似,只不過監視的是任意繫結資料的變化。
MultiDataTrigger 聯合多個數據觸發器。
EventTrigger 這是最複雜的觸發器。當事件發生時,這種觸發器應用動畫。

簡單的觸發器(Trigger)

可為任何依賴項屬性關聯簡單觸發器。例如,可通過相應Control類的IsFocused、IsMouseOver以及IsPressed屬性的變化,建立滑鼠懸停效果和焦點效果。 每個觸發器都制定了正在監視的屬性以及正在等待的屬性值。當屬性值出現時,將應用Trigger.Setters集合裡的設定器。
<Window.Resources>
        <Style x:Key="BigFontButton">
            <Style.Setters>
                <Setter Property="Control.FontFamily" Value="Times New Roman"/>
                <Setter Property="Control.FontSize" Value="18"/>
                <Setter Property="Control.FontWeight" Value="Bold"/>
            </Style.Setters>
            <Style.Triggers>
                <Trigger Property="Control.IsFocused" Value="True">  //檢測是否聚焦,然後執行改變前景色
<Setter Property="Control.Foreground" Value="DarkRed"/> </Trigger> </Style.Triggers> </Style> </Window.Resources>

MultiTrigger

根據多個條件觸發<Style.Triggers>

                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Property="Control.IsFocused" Value="true"/>
                        <Condition Property="Control.IsMouseOver" Value="true"/>
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.Setters>
                        <Setter Property="Control.Foreground" Value="DarkRed"/>
                    </MultiDataTrigger.Setters>
                </MultiDataTrigger>
            </Style.Triggers>

DataTrigger(資料觸發器)
根據繫結的資料內容的值內容觸發

<Style.Triggers>
<DataTrigger Binding="{Binding Button.Text }" Value="hello">
<Setter Property="Foreground" Value="Red"> </Setter>

</DataTrigger>
</Style.Triggers>

MultiDataTrigger跟MultiTrigger同理

事件觸發器

 <Style.Triggers>
                <EventTrigger RoutedEvent="Mouse.MouseEnter">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Duration="0:0:3" Storyboard.TargetProperty="FontSize"
                                                 To="50"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
                <EventTrigger RoutedEvent="Mouse.MouseLeave">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Duration="0:0:3" Storyboard.TargetProperty="FontSize"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>