当前位置: 首页 > news >正文

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

触发器

  • 1. 概述
  • 2. 详解
    • 2.1. Trigger 用法
    • 2.2. MultiTrigger 用法
    • 2.3. DataTrigger 用法
    • 2.4. EventTrigger 用法
  • 总结


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内,又可以写在控件内。
http://www.dtcms.com/a/264288.html

相关文章:

  • langchain从入门到精通(三十三)——RAG优化策略(九) MultiVector实现多向量检索文档
  • 原神八分屏角色展示页面(纯前端html,学习交流)
  • 《汇编语言:基于X86处理器》第6章 条件处理(1)
  • 每日八股文7.1
  • python-函数模块包
  • 网络基础知识与代理配置
  • 单元测试详解
  • AKAZE(Accelerated-KAZE)图像特征点检测算法详解和C++代码实现示例
  • 6.2 实现文档加载和切分和简易向量数据库的功能
  • 【在 FastAdmin 中取消特定字段的搜索功能】
  • Conda 虚拟环境克隆与 PyCharm 配置教程
  • 高阶数据结构------并查集
  • uniapp+vue3 中使用echart 以及echart文件过大需要分包的记录
  • 吸烟行为检测数据集介绍-2,108张图片 公共场所禁烟监控 健康行为研究
  • SpringCloud系列(45)--SpringCloud Bus简介
  • UE5 - 制作《塞尔达传说》中林克的技能 - 18 - 磁力抓取器
  • 强化学习【chapter0】-学习路线图
  • Java Selenium反爬虫技术方案
  • 07 Springboot+netty+mqtt服务端实现【重构】
  • 数据结构之带头双向循环链表
  • 苍穹外卖系列问题之Day11_05营业额统计代码开发2 StringUtils.join(dateList,“,“)报错
  • Cross-modal Information Flow in Multimodal Large Language Models
  • 【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】
  • 2025年主流大厂Java后端面试题主题深度解析
  • 推客系统小程序终极指南:从0到1构建自动裂变增长引擎,实现业绩10倍增长!
  • 快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
  • 【大模型学习 | BLIP2原理】
  • 「Java流程控制」for循环结构
  • langchain从入门到精通(三十二)——RAG优化策略(八)自查询检索器实现动态数据过滤
  • 腾讯 iOA 零信任产品:安全远程访问的革新者