WPF触发器之数据触发器(A)
WPF触发器
属性触发器——当依赖属性的值改变时调用。
数据触发器——当普通.NET属性的值改变时调用。
事件触发器——当路由事件被触发时调用。
1. 数据触发器示例:数字从0~9计数,当数字变为8时候,数字变化成红色并加粗进行显示。
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 ->0
2. 新建WPF项目,项目名称:DataTriggerDemo。
3. 新增Views文件夹,右键Views文件夹,新增用户控件Timer.xaml;并在页面中加入Button和Textblock控件。
4. 新增ViewModels文件夹,右键ViewModels文件夹,新增类TimerViewModel.cs;在代码中增加StartCommand命令和DisplayNumber属性。
1 private int displayNumber = 0; 2 public int DisplayNumber 3 { 4 get { return displayNumber; } 5 set 6 { 7 displayNumber = value; 8 NotifyPropertyChanged("DisplayNumber"); 9 } 10 } 11 12 private ICommand startCommand; 13 public ICommand StartCommand 14 { 15 get 16 { 17 if (startCommand == null) 18 { 19 startCommand = new RelayCommand(param => 20 { 21 Start(); 22 }, param => true); 23 } return startCommand; 24 } 25 }
5. 在TimerViewModel中增加计数方法。
1 private void Start() 2 { 3 new Timer(new TimerCallback(param => 4 { 5 DisplayNumber++; 6 if (DisplayNumber == 10) 7 { 8 DisplayNumber = 0; 9 } 10 })).Change(0, 1000); 11 }
6. 在Timer.xaml页面增加数据触发器代码。
1 <UserControl.Resources> 2 <Style TargetType="TextBlock"> 3 <Style.Triggers> 4 <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Text}" Value="8"> 5 <Setter Property="Foreground" 6 Value="Red"></Setter> 7 <Setter Property="FontWeight" 8 Value="Bold"></Setter> 9 <Setter Property="FontSize" 10 Value="29"></Setter> 11 </DataTrigger> 12 </Style.Triggers> 13 </Style> 14 </UserControl.Resources>
7. 运行效果。
点击这里下载源代码。
作者:backslash112 (美国CS研究生在读/机器人工程师)
出处:http://sirkevin.cnblogs.com
GitHub:https://github.com/backslash112
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://sirkevin.cnblogs.com
GitHub:https://github.com/backslash112
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2012-10-08 12:09 backslash112 阅读(9078) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架