WPF学习笔记(18)触发器Trigger


1. 概述

在这里插入图片描述
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.trigger?view=netframework-4.8

2. 详解

在Style中可以指定触发器类型,触发器分为以下几种

类型说明
Trigger触发器,在满足一个条件时应用属性值或执行操作的触发器。
MultiTrigger多触发器,在满足多个条件时应用属性值或执行操作的触发器 。
DataTrigger数据触发器,它会在绑定数据满足指定条件时应用属性值或执行操作。
EventTrigger事件触发器,在某个事件发生时应用属性值或执行操作。

2.1. Trigger 用法

Trigger 类表示触发器在满足一个条件时应用属性值或执行操作,其部分属性和代码示例如图如下

属性说明
Property获取或设置一个属性,该属性返回要与触发器的 Value 属性进行比较的值。该比较是一项引用相等性检查。
Value获取或设置要与元素的属性值进行比较的值。该比较是一项引用相等性检查。
Setters获取 Setter 对象的集合,这些对象描述当满足指定条件时要应用的属性值。

在这里插入图片描述

<Window.Resources>
    <Style TargetType="Button" >
        <!--单条件触发,鼠标移入-->
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="White"/>
            </Trigger>
         </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="251,110,0,0" VerticalAlignment="Top" Height="171" Width="320"/>
</Grid>

2.2. MultiTrigger 用法

MultiTrigger 类表示在满足多个条件时应用属性值或执行操作,,其部分属性和代码示例如图如下

属性说明
Conditions当鼠标左键或空格键在按钮上按下时为true,否则false。
获取或设置触发器的多个条件。
Setters获取 Setter 对象的集合,这些对象描述当满足指定条件时要应用的属性值。

在这里插入图片描述

<Window.Resources>
    <Style TargetType="Button" >
            <!--多条件触发,鼠标移入和点击-->
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True"/>
                    <Condition Property="IsPressed" Value="True"/>
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="Yellow"/>
                <Setter Property="FontSize" Value="40"/>
            </MultiTrigger>  
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="251,110,0,0" VerticalAlignment="Top" Height="171" Width="320"/>
</Grid>

2.3. DataTrigger 用法

DataTrigger 触发器会在绑定数据满足指定条件时应用属性值或执行操作。部分属性和代码示例如图

属性说明
Binding获取或设置产生数据对象的属性值的绑定,该属性返回要与触发器的 Value 属性进行比较的值。
Value获取或设置要与元素的属性值进行比较的值。该比较是一项引用相等性检查。
Setters获取 Setter 对象的集合,这些对象描述当满足指定条件时要应用的属性值。

在这里插入图片描述

<Grid>
    <CheckBox x:Name="checkBox" Content="大号字体" HorizontalAlignment="Left" Margin="269,84,0,0" VerticalAlignment="Top" Height="26" Width="119"/>

    <!--设置默认字体大小后,会让样式里面的Setter属性不生效,其他属性同理-->
    <TextBox Text="你猜字体会不会变大" Foreground="Red" HorizontalAlignment="Left" Height="101" Margin="269,162,0,0" TextWrapping="Wrap"  VerticalAlignment="Top" Width="268">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=checkBox, Path=IsChecked}" Value="true">
                        <!--DataTrigger.Setters可省略-->
                        <Setter Property="FontSize" Value="28"/>
                        <Setter Property="Foreground" Value="Blue"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

</Grid>

2.4. EventTrigger 用法

EventTrigger是事件触发器,应用一组操作影响一个事件。其部分属性和代码示例如图如下,既演示将EventTrigger写在Window.Resource内,又演示写在控件内。

属性说明
RoutedEvent获取或设置将激活该触发器的 RoutedEvent。
Actions获取事件发生时要应用的操作的集合。

在这里插入图片描述

	<Grid>
        <Button Content="Button" HorizontalAlignment="Left" Margin="269,291,0,0" VerticalAlignment="Top" Height="35" Width="51">
            <Button.Style>
                <Style TargetType="Button">
                    <Style.Triggers>
                        <!--也可只写RoutedEvent="MouseEnter"-->
                        <EventTrigger RoutedEvent="Button.MouseEnter" >
                            <!--调用动画的故事板-->
                            <BeginStoryboard>
                                <Storyboard>
                                    <!--DoubleAnimation的重要内容,From (值从哪里开始), 包含To (值到哪里结束), Duration (值的变化经过多少时间)-->
                                    <!--本处省略了From (值从哪里开始),TargetProperty为控件的Width,Duration内参数为时分秒,在1.5s内达到300-->
                                    <DoubleAnimation To="300" Duration="0:0:1.5" Storyboard.TargetProperty="Width"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </Grid>

总结

  • 触发器既可以写在Window.Resource内,又可以写在控件内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值