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

posted @   Aatrox1  阅读(1836)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示