WPF中的觸發器——Trigger

trigger主要運用的場景在Style、ControlTemplate、DataTemplate三個地方。在這些地方可以使用trigger,具體視情況而定。

1.屬性觸發器(Property Trigger)

一般用於自身Dependency Property的值發生改變時觸發

2.數據觸發器(DataTrigger)

Trigger都是專對於控件自身的依賴屬性(dependency properties)。DataTrigger是一般專對於另的控件的屬性,而且都是用綁定來實現的。
倆種用法
第一種:-支持Binding

<Style TargetType="Border">`
<Style.Triggers>
    `<DataTrigger Binding="{Binding WindowState,RelativeSource={RelativeSource AncestorType=Window}}" Value="Normal">`
        `<Setter Property="CornerRadius" Value="0,8,0,0"/>`
    `</DataTrigger>`
    `<DataTrigger Binding="{Binding WindowState,RelativeSource={RelativeSource AncestorType=Window}}" Value="Maximized">`
        `<Setter Property="CornerRadius" Value="0"/>`
    `</DataTrigger>`
     </Style.Triggers>
     `</Style>`

第二種:

`<Style TargetType="{x:Type ListBoxItem}">`

    <Style.Triggers>

    `<DataTrigger Binding="{Binding Path=Role}" Value="Admin">`

    `<Setter Property="Foreground" Value="Red" />`

    `</DataTrigger>`

    </Style.Triggers>

</Style>
3.事件觸發器(EventTrigger)

Eventtrigger一般用於動畫效果的處理。上面倆個觸發器作用對象都是屬性。而這個卻是作用於事件的。表示當前某個事件發生後要觸發。
一般配合動畫使用,它的內部不能是簡單的Setter集合,而必須是TriggerAction的實例。

`<Grid>`
        `<Button Margin="15" Width="200" Name="myButton">`
            Click Me to Animate Drop Shadow!
            <Button.BitmapEffect>
                `<DropShadowBitmapEffect x:Name="myDropShadowBitmapEffect" Color="Black" ShadowDepth="0" />`
            </Button.BitmapEffect>
            <Button.Triggers>
                `<EventTrigger RoutedEvent="Button.Click">`
                    `<BeginStoryboard>`
                        `<Storyboard>`
                            `<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.5" 
                                                From="50,50,50,50" To="0,0,50,50" AutoReverse="True" />`
                            `<DoubleAnimation Storyboard.TargetName="myDropShadowBitmapEffect" 
                                             Storyboard.TargetProperty="ShadowDepth" 
                                             From="0" To="30" Duration="0:0:0.5" AutoReverse="True" />`
                            `<DoubleAnimation Storyboard.TargetName="myDropShadowBitmapEffect" 
                                             Storyboard.TargetProperty="Softness" 
                                             From="0" To="1" Duration="0:0:0.5" AutoReverse="True" />`
                        `</Storyboard>`
                    `</BeginStoryboard>`
                `</EventTrigger>`
            </Button.Triggers>
        `</Button>`
    `</Grid>`
--多條件觸發器(MultiDataTrigger)

上面的觸發器應該來講算是比較簡單而又常用。可是都是單個觸發條件。我們在編寫業務代碼的時候,往往可以存在多個條件下的觸發效果。所以上面的Trigger和DataTrigger就不能滿足需求了。爲了這種情況,WPF爲Trigger提供了MultiTrigger,爲DataTrigger提供了MultiDataTrigger。除了語法上有一定的區別以外,效果是一樣子的。

`<TextBlock Text="I am Aomi" Width="75" Height="20">`
            <TextBlock.Style>
                `<Style TargetType="TextBlock">`
                    <Style.Triggers>
                        `<MultiTrigger>`
                            <MultiTrigger.Conditions>
                                `<Condition Property="IsEnabled" Value="True" />`
                                `<Condition Property="IsMouseOver" Value="True" />`
                            </MultiTrigger.Conditions>
                            `<Setter Property="Background" Value="#4d4d4d" />`
                        `</MultiTrigger>`
                    </Style.Triggers>
                `</Style>`
            </TextBlock.Style>
        `</TextBlock>`

MultiDataTrigger的用法
`<TextBlock Text="I am Aomi" Width="75" Height="20">`
            <TextBlock.Style>
                `<Style TargetType="TextBlock">`
                    <Style.Triggers>
                        `<MultiDataTrigger>`
                            <MultiDataTrigger.Conditions>
                                `<Condition Binding="{Binding IsChecked,ElementName=Changer  }" Value="True" />`
                                `<Condition Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self} }" Value="True" />`
                            </MultiDataTrigger.Conditions>
                            `<Setter Property="Foreground" Value="Red" />`
                        `</MultiDataTrigger>`
                    </Style.Triggers>
                `</Style>`
            </TextBlock.Style>
        `</TextBlock>`

關注我,WPF FlyUI框架作者

github地址:https://github.com/AatroxBot/FlyUI.Demo.git

碼雲地址:https://gitee.com/Aatrox1/fly-ui-demo.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章