WPF学习笔记——28)触发器

在WPF中,当使用样式、资源以及数据绑定时,即使不使用代码,也能完成大部分功能。

触发器就是实现该功能的另一种方法,可以自动完成简单样式的改变。

1、简单触发器

我们可以为任何一个依赖项属性关联一个简单触发器,每个简单触发器都关联了一个正在监视的属性。

<Window x:Class="_28.Trigger.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="style1">
            <Style.Setters>
                <Setter Property="Control.FontFamily" Value="Times New Roman"></Setter>
                <Setter Property="Control.FontSize" Value="32"></Setter>
            </Style.Setters>
            <Style.Triggers>
                <Trigger Property="Control.IsFocused" Value="True">
                    <Setter Property="Control.Foreground" Value="Yellow"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    
    <StackPanel Margin="5">
        <Button Margin="5" Content="Button1" Height="Auto" Name="button1" Width="Auto" 
                Style="{StaticResource ResourceKey=style1}"/>
        <Button Margin="5" Content="Button2" Height="Auto" Name="button2" Width="Auto" 
                />
    </StackPanel>
</Window>

我们定义一个当按钮被按下时的触发器,当触发器被触发时会改变字体颜色:

      

针对同一个属性我们可以设置多个触发器,最后的效果以最后定义的触发器为准。

如果我们希望多个属性同时满足条件时才会触发触发器,可以利用MultiTrigger触发器,这种触发器会提供一个Conditions的一个集合,对该集合进行设置属性和满足的条件。 

    <Window.Resources>
        <Style x:Key="style1">
            <Style.Setters>
                <Setter Property="Control.FontFamily" Value="Times New Roman"></Setter>
                <Setter Property="Control.FontSize" Value="32"></Setter>
            </Style.Setters>
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="Control.IsFocused" Value="true"></Condition>
                        <Condition Property="Control.IsMouseOver" Value="true"></Condition>
                    </MultiTrigger.Conditions>
                    <MultiTrigger.Setters>
                        <Setter Property="Control.Foreground" Value="Red"></Setter>
                    </MultiTrigger.Setters>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

我们设置了当按钮被按下,且鼠标要停留在上面才会改变字体颜色的多触发器,效果如下: 

   

2、事件触发器

事件触发器和简单触发器不同的是,事件触发器监视的是某个特定的事件,而不是某个属性。

    <Window.Resources>
        <Style x:Key="style1">
            <Style.Setters>
                <Setter Property="Control.FontFamily" Value="Times New Roman"></Setter>
                <Setter Property="Control.FontSize" Value="32"></Setter>
            </Style.Setters>
            <Style.Triggers>
                <EventTrigger RoutedEvent="Mouse.MouseEnter">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize" To="80"></DoubleAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>

                <EventTrigger RoutedEvent="Mouse.MouseLeave">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize"></DoubleAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

我们定义一个当鼠标停留在按钮上时更改字体大小的事件触发器,然后鼠标离开时恢复:

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值