首页 > 其他分享 >07 触发器

07 触发器

时间:2024-10-11 14:43:59浏览次数:10  
标签:控件 触发器 07 触发 MultiTrigger 属性

07 触发器

触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作。在WPF中,触发器可以分为以下几类:基本触发器(Trigger);事件触发器(EventTrigger);数据触发器(DataTrigger);多条件触发器(MultiTrigger,MultiDataTrigger)。下面我们来通过代码一一了解。

基本触发器(属性触发器)

根据控件的某个属性是否处于某个值的情况来激活触发器,请看如下代码。该例子将会在鼠标进入按钮时修改按钮的字体为红色22像素。当滑块的值为1时修改背景为蓝色

<Button Content="测试按钮">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Trigger.Setters>
                        <Setter Property="Foreground" Value="red"/>
                        <Setter Property="FontSize" Value="22"/>
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
<Slider Maximum="5" Minimum="0">
    <Slider.Style>
        <Style TargetType="Slider">
            <Style.Triggers>
                <Trigger Property="Value" Value="1">
                    <Trigger.Setters>
                        <Setter Property="Background" Value="Blue"/>
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Slider.Style>
</Slider>

如果有多个元素都需要添加类似的触发器,可以使用上一章节讲述的知识点将Style放在资源中,如下

<Window.Resources>
    <Style TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
                <Trigger.Setters>
                    <Setter Property="Foreground" Value="red"/>
                    <Setter Property="FontSize" Value="22"/>
                </Trigger.Setters>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="Slider">
        <Style.Triggers>
            <Trigger Property="Value" Value="1">
                <Trigger.Setters>
                    <Setter Property="Background" Value="Blue"/>
                </Trigger.Setters>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<StackPanel>
    <Button Content="测试按钮"/>
    <Slider Maximum="5" Minimum="0"/>
</StackPanel>

Trigger​控件的属性可以是控件的所有属性,如:Content、Value、IsMouseOver、IsMouseCaptured。。。

如果我们想监视多个属性的值来控制触发器,可以使用MultiTrigger​,需要将多个触发条件写在MultiTrigger.Conditions中,其它用法都是一致的

<Style TargetType="Slider">
    <Style.Triggers>
        <!--多属性触发器-->
        <MultiTrigger>
            <!--这里面写触发器激活的条件-->
            <MultiTrigger.Conditions>
                <Condition Property="Value" Value="1"/>
                <Condition Property="Orientation" Value="Vertical"/>
            </MultiTrigger.Conditions>
            <!--这里写触发器激活时应用的样式-->
            <MultiTrigger.Setters>
                <Setter Property="Background" Value="Blue"/>
            </MultiTrigger.Setters>
        </MultiTrigger>
    </Style.Triggers>
</Style>

事件触发器

事件触发器有些不同的是,它触发执行的是一段动画,并且是通过RoutedEvent来执行要监视的事件

<Style TargetType="Button">
    <Setter Property="Width" Value="400"/>
    <Style.Triggers>
        <!--事件触发器,当鼠标移入事件触发时触发器被激活-->
        <EventTrigger RoutedEvent="MouseEnter">
            <!--设置事件触发器的Actions属性-->
            <EventTrigger.Actions>
                <!--Actions的属性一般是一个故事板-->
                <BeginStoryboard>
                    <!--故事板的描述设置-->
                    <Storyboard>
                        <!--双精度浮点数的动画,该标签表示要设置控件的Width属性到200,用时300ms-->
                        <DoubleAnimation To="200" Storyboard.TargetProperty="Width" Duration="0:0:0.300"/>
                        <ColorAnimation To="Red" Storyboard.TargetProperty="Foreground.Color" Duration="0:0:0.300"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeave">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="400" Storyboard.TargetProperty="Width" Duration="0:0:0.300"/>
                        <ColorAnimation To="Black" Storyboard.TargetProperty="Foreground.Color" Duration="0:0:0.300"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Style.Triggers>
</Style>

可以使用该触发器给窗体加上入场动画

<Window.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard >
            <Storyboard>
                <DoubleAnimation From="0" To="1" Duration="0:0:0.500" Storyboard.TargetProperty="Opacity"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>

数据触发器

数据触发器通过监控绑定到触发器上的数据值来决定是否激活触发器

<Style TargetType="Button">
    <Style.Triggers>
        <!-- 绑定数据到   s  元素上,绑定的属性为Value,目标值为3时激活 -->
        <DataTrigger Binding="{Binding Value, ElementName=s}" Value="3">
            <DataTrigger.Setters>
                <Setter Property="Foreground" Value="Red"/>
            </DataTrigger.Setters>
        </DataTrigger>
    </Style.Triggers>
</Style>

还有多数据触发器

<Style TargetType="Button">
    <Style.Triggers>
        <MultiDataTrigger>
            <!-- 当两个控件的Value属性值都为3时激活触发器 -->
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Path=Value, ElementName=s1}" Value="3"/>
                <Condition Binding="{Binding Path=Value, ElementName=s2}" Value="3"/>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="Foreground" Value="Red"/>
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

标签:控件,触发器,07,触发,MultiTrigger,属性
From: https://www.cnblogs.com/laoguonana/p/18458353/07-trigger-biosl

相关文章

  • 一文读懂施密特触发器光耦的结构与原理
    施密特触发器光耦(SchmittTriggerOptocoupler)是一种将光耦和施密特触发器电路相结合的电子元件。它不仅具备光耦的电气隔离功能,还具备施密特触发器的噪声抑制和信号整形能力。本文将详细探讨施密特触发器光耦的结构,并分析其工作原理。施密特触发器光耦的详细结构LED部分:LED......
  • 施密特触发器光耦——电子工程师的理想选择
    在现代电子设计领域中,可靠性和抗干扰性是工程师们最关注的特性之一。而施密特触发器光耦,作为一种高度稳定和抗干扰能力卓越的元件,正成为越来越多电子工程师的首选。今天,我们将带您深入解析施密特触发器光耦的关键性能特征,揭示它为何如此受欢迎。施密特触发器光耦KLH11LX传输......
  • Java 初学 day07
    Java071、继承extend举例我想养一只......
  • 洛谷P4074糖果公园(带修莫队)
    [WC2013]糖果公园题目描述Candyland有一座糖果公园,公园里不仅有美丽的风景、好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩。糖果公园的结构十分奇特,它由\(n\)个游览点构成,每个游览点都有一个糖果发放处,我们可以依次将游览点编号为\(1\)......
  • P5078 Tweetuzki 爱军训
    Tweetuzki爱军训引言本文更注重推导过程,无法理解其他题解的可以来这里看看。解法考虑贪心。用\(ans\)表示最后的答案,在刚开始时假设全部都按\(1\ton\)的顺序出列,则\(ans=\sum^{n}_{i=1}w_i\timesi\)。对第\(k\)个同学出列的价值变化考虑,有:\[ans=\sum^{k......
  • Windows 或Office 激活失败 错误代码 0x80072F8F
    国庆节收假回来,工作站上几台电脑出现问题,重新修复,更换硬件(主板)或是重装系统,最终需要激活成为正版来使用。其中一台,在激活时,Windows激活失败错误代码0x80072F8F,发现日期与时间不正确: 把时间改正之后,终于激活Windows。 哈哈......在另外一台电脑上,Windows是激活的,但需要......
  • SSM外卖点餐软件APP-计算机毕业设计源码30768
     目 录摘要1绪论1.1研究背景1.2研究目的1.3论文结构与章节安排2 外卖点餐软件APP系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据流程3.3.2业务流程2.3系统功能分析2.3.......
  • 题解:CF1007D Ants
    题目传送门每只蚂蚁只走一对点肯定是不劣的,由此想到2-sat。限制条件是:若\((a,b)\)和\((c,d)\)两条链相交,则不能同时选。直接建图肯定是爆炸的。用树剖可以将\((a,b)\)这条链划分成\(O(\logn)\)个区间。因为同一条链的区间不交,限制条件变为若两个区间相交,则这两个点不......
  • ​基于智谱清言大模型的本地安装与使用(3070TI)
    大模型简介什么是大模型大模型的发展历程大模型的特点大模型的分类安装步骤硬件要求环境准备cuda安装conda安装python虚拟环境创建git-lfs安装模型文件下载依赖安装检查安装成功使用基本调用模型的微调多轮对话格式数据集格式配置文件......
  • 【MySQL】视图、存储过程、触发器
    目录一、视图1.创建视图2.视图的使用3.查看视图4.删除视图5. 视图的作用二、存储过程 1.存储过程的创建2.使用存储过程3.带参数的存储过程3.1 分页4.存储过程与函数的区别5.存储过程的缺陷三、触发器 --隐式执行1.创建触发器2.查看库中所有......