使用触发器可以自动完成简单的样式改变。
项目源码

触发器

在Style定义时使用Style.Triggers属性来实现:

<!--设置触发器-->
<Style.Triggers><Trigger Property="Control.IsFocused" Value="True"><!--获取焦点的时候,点击按钮--><Setter Property="Control.Foreground" Value="DarkRed"/></Trigger>
</Style.Triggers>

给按钮使用该Style及其触发器:

<Button Name="btn1" Content="Button" Margin="5" VerticalAlignment="Top" Style="{StaticResource BigFontButton}"/>

当点击按钮,按钮获得焦点时,触发样式“前景色变为深红色”:

当鼠标点击下方TextBox时,按钮失去焦点,又变回触发之前的样式。
再设置一个触发器:

<Trigger Property="Button.IsPressed" Value="True"><Setter Property="Control.Foreground" Value="Blue"/>
</Trigger>

则在按下的时候为蓝色,弹起为红色。

多触发器

设置满足多个触发条件时才触发控件的样式改变。利用MultiTrigger进行定义,用MultiTrigger.Conditions定义多个条件的集合,用MultiTrigger.Setters应用改变的样式:

<Style.Triggers><MultiTrigger><MultiTrigger.Conditions><!--多个条件同时满足才触发--><Condition Property="Control.IsFocused" Value="True"/><!--获得焦点--><Condition Property="Control.IsMouseOver" Value="True"/><!--且鼠标在控件上悬浮--></MultiTrigger.Conditions><MultiTrigger.Setters><Setter Property="Control.Foreground" Value="SkyBlue"/></MultiTrigger.Setters></MultiTrigger>
</Style.Triggers>

结果,只有当按钮获取焦点且鼠标悬停与按钮上方时,才能应用触发器样式改变:

事件触发器

定义在鼠标进入和离开时用故事板动画改变字体的大小,使得大小的变化为逐渐变化,不是突变。使用EventTrigger属性进行改变:

<Style.Triggers><EventTrigger RoutedEvent="Mouse.MouseEnter"><!--事件触发器--><BeginStoryboard><Storyboard><!--故事板,可以让改变从小逐渐变大,而不是突然变大--><DoubleAnimation Duration="0:0:0.2" Storyboard.TargetProperty="FontSize" To="48"/><!--Duration表示花多少时间改变--></Storyboard></BeginStoryboard></EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave"><!--事件触发器--><BeginStoryboard><Storyboard><!--故事板,可以让改变从小逐渐变大,而不是突然变大--><DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize" To="10"/><!--Duration表示花多少时间改变--></Storyboard></BeginStoryboard></EventTrigger>
</Style.Triggers>

WPF系列教程(二十九):触发器Triggers、MultiTrggers、EventTrigger——属性触发器、多触发器、事件触发器相关推荐

  1. Debezium报错处理系列之二十九:Make sure that an instance of SQL Server is running on the host and accepting TCP

    Debezium报错处理系列之二十九:Make sure that an instance of SQL Server is running on the host and accepting TCP ...

  2. Kubernetes生产实践系列之二十九:Kubernetes基础技术之容器关键技术实践

    一.前言 在文章<Kubernetes生产实践系列之二十八:Kubernetes基础技术之容器关键技术介绍>中,对于Docker容器技术依赖的namespace.cgroup和UnionF ...

  3. druid 手动指定数据源_Spring Boot2 系列教程(二十)整合JdbcTemplate 多数据源

    多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...

  4. 二十五、Node中的Buffer缓冲器和EventEmitter事件触发器

    @Author:Runsen @Date:2020/6/5 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  5. WPF系列教程(十二):控件类——前景背景、字体Background、Foreground、FontFamily、FontSize

    控件都包含背景画刷和前景画刷属性. 部分控件包含字体属性. 鼠标光标的设置. 示例项目源码 为控件设置背景与前景 下面这个窗体 <Window x:Class="Control.Mai ...

  6. MATLAB实战系列(二十九)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)-交叉算子

    前言 代码明细可参见 MATLAB实战系列(八)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)(附MATLAB代码) 交叉算子的实现机制 我们还是以求解TSP问题为例,8个城市的坐标如下所示. ...

  7. 详解DMZ的部署与配置:ISA2006系列之二十九

    DMZ的部署及配置 DMZ是Demilitarized Zone的缩写,俗称非军事化隔离区.DMZ是一个位于内网和外网之间的特殊区域,一般用于放置公司对外开放的服务器,例如Web服务器,Ftp服务器, ...

  8. 英语总结系列(二十九):好好学英语

    [前言] 好好学英语不是一句空话,英语也是我们的红利. [本月回顾] 本月最后的十天又恢复了每天两个小时的英语学习模式: 本月学习的内容<新美> 进步一点:随着熟悉度越来越高,逐渐体会到了 ...

  9. 应用安全系列之二十九:密码管理

    一个系统的登录有多种方式,严格的有使用人的指纹.虹膜等生物特征作为登录凭据,在一些电影大片中,也经常看到一些牛逼的人如何盗取指纹来获取系统的登录.生活中,常见的指纹锁采用的是人的指纹作为登录凭证.不过 ...

  10. Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

    关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...

最新文章

  1. mysql提示符详解_MySQL字符集使用详解
  2. oracle服务器双机,双机热备Oracle数据库服务器操作实战
  3. JS事件冒泡与事件捕获
  4. 如何搭建socks5和ss节点_以太坊区块链搭建与使用(三)-联盟链
  5. linux fcitx 下载网址(亲测可用)
  6. 配置Windows Server2008故障转移集群
  7. 功能机也不放过,谷歌或为 Chrome 提供非触控模式
  8. Mac电脑「空格键」的妙用,原来有这么多功能
  9. LeetCode之第一个错误版本
  10. OpenGL超级宝典 使用缓冲为顶点着色器提供数据
  11. 简单区分单射、满射与双射
  12. Jenkins 自动化部署流水线优化经验
  13. 笔记本键盘如何摇身一变机械键盘?
  14. Steam游戏服务器配置选择 IP
  15. 基于单片机的篮球计分器系统设计(#0455)
  16. pfn_to_page
  17. clickhouse Parametric Aggregate Functions的使用
  18. 智能门锁:电源管理概述2
  19. 【每日新闻】Gartner:2017年CRM跃升为规模最大、增速最快的软件市场 | 中国科学家发现神奇半导体材料...
  20. 数字图像处理之matlab大作业:自制图像处理小工具

热门文章

  1. php模拟腾讯微校第三方认证,小程序,对个人公众号进行了一次权限的解放
  2. 插件开发之VSCode
  3. Oracle SPARC T5-4 服务器:硬件规格
  4. 解决:使用ssh-copy-id命令时出现ERROR: ssh: Could not resolve hostname hadoop01:Name or service not known
  5. 一步步的教你如何创建第一个APP?-swift
  6. J2EE_01快速入门 集合框架
  7. 招聘、入职、参与和培训的HR人力资源团队 OKR 案例
  8. 力扣(279完全平方数)
  9. 自学Android开发(一)
  10. 汽车的空气悬架的功能以及发展趋势