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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/sirkevin/p/2715036.html