这一篇,总结Triggers。

FrameworkElement、Style、ControlTemplate和DataTemplate都具有一个类型为TriggerCollection 的Triggers属性,TriggerCollection继承自:   Collection<TriggerBase>,所以它们都有一个触发器的集合。

触发器可以在xaml中实现样式的自动变化,或者使用数据绑定,或者触发某些事件的时候,生成动画。所以触发器分为:Trigger、MultiTrigger、DataTrigger、MultiDataTrigger和EventTrigger。

1. Trigger:根据某一个依赖属性的变化,用Setter更改某些样式,

示例代码:

  <Style TargetType="Button"><Style.Triggers><Trigger Property="IsPressed" Value="True"><Setter Property="FontSize" Value="28"></Setter><Setter Property="BorderBrush" Value="Red"></Setter><Setter Property="BorderThickness" Value="2"></Setter></Trigger></Style.Triggers></Style>

当Button的IsPressed的Value为True时,会用Setter完成FontSize,BorderBrush和BorderThickness的设置。

2. MultiTrigger:只有多个依赖属性的的变化同时都满足时,触发器才会生效。

示例代码:

 <Style TargetType="Button"><Style.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property="Background" Value="Black"></Condition><Condition Property="IsPressed" Value="True"></Condition></MultiTrigger.Conditions><MultiTrigger.Setters><Setter Property="FontSize" Value="28"></Setter></MultiTrigger.Setters></MultiTrigger></Style.Triggers></Style>

只有当Button的Background为Black并且IsPressed为True时,才会更改Button的Content的FontSize为28.

3. DataTrigger:可以完成Trigger的所有功能,也可以完成对非依赖属性的监听。DataTrigger一共引入了三个参数:Binding,Value和Setters。当需要设置数据触发器侦听的数据源时,通过绑定对Binding属性赋值的方式来完成。

示例代码:

public class TestButton : Button {public int Index { set; get; }}<Style TargetType="local:TestButton"><Style.Triggers><DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Index}" Value="2"><Setter Property="Foreground" Value="Red"/></DataTrigger></Style.Triggers>
</Style>

TestButton 的Index属性是非依赖属性,用Trigger监听的时候,是会报错的。所以要用DataTrigger。

4. MultiDataTrigger:只有多个属性的的变化同时都满足时,触发器才会生效。

示例代码

public class TestButton : Button {public int Index { set; get; }public string Text { set; get; }}<Style TargetType="local:TestButton"><Style.Triggers><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Index}" Value="2" /><Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="HI" /></MultiDataTrigger.Conditions><Setter Property="Background" Value="Red" /></MultiDataTrigger></Style.Triggers></Style>

当Index=2,Text=“HI”同时成立时,设置Background为Red。

5. EventTrigger:事件被触发时完成一个动画。

示例 代码

  <Style TargetType="Button"><Style.Triggers><EventTrigger RoutedEvent="Mouse.MouseEnter"><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Button.Width)"  To="200"></DoubleAnimation></Storyboard></BeginStoryboard></EventTrigger.Actions></EventTrigger><EventTrigger RoutedEvent="Mouse.MouseLeave"><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Button.Width)" ></DoubleAnimation></Storyboard></BeginStoryboard></EventTrigger.Actions></EventTrigger></Style.Triggers></Style>

当MouseEnter事件被触发时,Button的Width会慢慢变为200,当MouseLeave事件被触发时,Button的Width慢慢恢复到最初的大小

作者:绿茶叶 
出处:http://www.cnblogs.com/greenteaone/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

WPF 触发器Triggers相关推荐

  1. WPF 触发器Triggers

    这一篇,总结Triggers. FrameworkElement.Style.ControlTemplate和DataTemplate都具有一个类型为TriggerCollection 的Trigge ...

  2. WPF触发器(Trigger)

    WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...

  3. 老猿学5G:融合计费基于QoS流计费QBC的触发器Triggers

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器来控制的.在<老猿学5G: ...

  4. WPF之触发器Triggers

    Trigger触发器:表示一个触发器,它按单个条件应用属性值或执行操作. SourceName属性: 获取或设置与导致关联的 setter 要应用的属性对象的名称. Property属性: 设置需要判 ...

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

    使用触发器可以自动完成简单的样式改变. 项目源码 触发器 在Style定义时使用Style.Triggers属性来实现: <!--设置触发器--> <Style.Triggers&g ...

  6. Flink触发器Triggers

    触发器(Triggers) 触发器确定窗口(由窗口分配器形成)何时准备好由窗口功能处理.每个WindowAssigner都带有一个默认触发器.如果默认触发器不适合您的需求,则可以使用trigger(. ...

  7. (02) 任务(Jobs)和触发器(Triggers)

    Quart 的 API Quartz API 中的关键接口和类如下: IScheduler-与调度器(scheduler)进行交互的主要 API: IJob-被组件继承和实现,由调度器来执行的接口: ...

  8. 老猿学5G:融合计费基于流计费的触发器Triggers

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 每个触发条件都是一个可计费事件.SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器 ...

  9. oracle apex触发器,triggers - 插入之前/更新Apex触发器之前,测试覆盖率失败 - 堆栈内存溢出...

    在机会上插入/更新触发器之前,我有一个非常简单的方法,它可以根据包含销售处(州)位置信息的下拉值自动选择价目表. 这是我的触发器 : trigger SelectPriceBook on Opport ...

最新文章

  1. 网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置)
  2. [Asp.net mvc]OutputCacheAttribute
  3. 美国防承包商博思艾伦泄露五角大楼相关敏感文件
  4. C++(Goto使用实例)
  5. linux 编译窗口,Ubuntu 10.04上编译安装Sawfish窗口管理器
  6. python3讨论交流地_讨论 - 廖雪峰的官方网站
  7. Hadoop 基础系列一Hadoop 系列之 1.0 和2.0 架构
  8. android代码怎么打成蓝色,如何将我的Android应用程序的重音颜色从蓝色更改为其他颜色...
  9. 啥时候js单元测试变的重要起来?
  10. 自定义圆形进度条ProgressBar
  11. 同余方程-NOIP2012TGD2T1
  12. Luogu4438[HNOI/AHOI2018] 道路
  13. 手把手教你架构3D游戏引擎
  14. java log viewer,LogViewer - 方便的日志查看工具
  15. IP5389+BM3451双向100瓦快充移动电源方案
  16. 消防水池液位报警装置设置参数
  17. Windows系统管理24招
  18. IP地址冲突解决方案,局域网IP地址冲突如何解决?
  19. 嵌入式SQLite数据库架构和设计
  20. python3 姓名随机生成脚本--random.randrange()用法

热门文章

  1. 计算机课题参与者的学术背景,课题参与有几种方法
  2. ICML 2019 Accepted Papers (Title, Author, Abstract, Code) (001-150)
  3. 爬取网易云音乐所有歌单信息
  4. 赵小楼《天道》《遥远的救世主》深度解析(126)说老实话办老实事,实事求是
  5. java 处理word,excel,pdf -javacode
  6. 织梦php程序调用模型,织梦教程:Dedecms的频道模型新建字段调用方法
  7. 李航老师《统计学习方法》第二版第三章课后题答案
  8. 使用计算机辐射最大,台式电脑哪里辐射最大
  9. 修改射手影音播放器字幕保存路径的两种方法
  10. lower_bound和upper_bound的实现