WPF触发器总结搬运

触发器:TriggerBase 类

触发器通过Style.Triggers集合链接到样式。每个样式都可以有任意多个触发器,而且每个触发器都是System.Windows.TriggerBase的派生类的实例。

有多种不同类型的触发器: Trigger(WPF定义的用户操作)、 MultiTrigger(多触发器)、 EventTrigger(事件触发器)、 DataTrigger(数据触发器)和 MultiDataTrigger(多数据触发器)。

主要运用的场景在Style, ControlTemplate和 DataTemplate。

名称 说明
Trigger 这是一种最简单的触发器。可以检测依赖项属性的变化,然后使用设置器改变样式
MultiTrigger 与Trigger类似,但这种触发器联合了多个条件。只有满足了所有这些条件,才会启动触发器
DataTrigger 这种触发器使用数据绑定。与Trigger类似,只不过监视的是任意绑定数据的变化
MultiDataTrigger 联合多个数据的触发器
EventTrigger 这是最复杂的触发器。当事件发生时,这种触发器一般应用于动画。
Trigger (WPF定义的用户操作)

等待按钮获得键盘焦点,当获取焦点时会将前景色设置为深红色。


XML

Copy

只要停止应用触发器,元素就会恢复到正常外观。

在该例中,这意味着只要用户使用Tab键让按钮失去焦点,按钮就会恢复为通常的灰色背景。

MultiTrigger (多条件触发器)

提供了一个Conditions集合,可通过该集合定义一系列属性和值得组合。

以下示例包含两个 MultiTrigger。 当 HasItems 属性为 false 且 Width 属性为 Auto 时,第一个设置 MinWidth 属性值。第二个属性是相似的,但适用于 MinHeight 属性。


  
    
  

  
    
      
      
    
    
  

  
    
      
      
    
    
  

XML

Copy

MultiTrigger 使你能够基于 Condition集合设置属性值或启动操作。 当元素的类Property的属性与指定的Value属性指定的属性Condition 的值匹配时,将满足条件。 该比较是一项引用相等性检查。 然后,可以使用 Setter 或 EnterActions 属性 ExitActions 在满足所有条件时应用更改或启动操作。

对象的 Setters 属性 MultiTrigger 只能包含 Setter 对象。 向 Setter 对象添加子级 MultiTrigger 会隐式将其添加到 SetterBaseCollection 对象中 MultiTrigger 。 EventSetter 不支持对象;仅 Style.Setters 支持 EventSetter 对象。

EventTrigger (事件触发器,一般用于动画)

普通触发器等待属性发生变化,而事件触发器等待特定的事件被引发

EventTriggers仅支持Actions(不能用Setter),一般用于动画。

下面的示例包含两 EventTrigger 个对象,其中一个对象是鼠标进入元素时发生的,在1.5秒内使矩形变长至300;另一个对象是鼠标离开元素时发生的,在1.5秒内使矩形变短至原始尺寸。


XML

Copy

在XAML中,必须在故事般中定义每个动画,故事板为动画提供了事件线。用户可以在故事板事件内部定义希望使用的一个或多个动画对象。每个动画对象执行本质上相同的任务:在一定时期内修改依赖项属性。

【WPF学习】第五十章 故事板 – Peter.Luo – 博客园 (cnblogs.com)

DataTrigger (数据触发器)

DataTrigger 类 (System.Windows) | Microsoft Learn

Style, ControlTemplate并且 DataTemplate 都具有触发器集合。 A DataTrigger 允许在数据对象的属性值与指定的 Value属性值匹配时设置属性值。 例如,如果要显示对象列表 Employee ,则可能希望前景颜色根据每个 Employee's 当前出席情况而有所不同。 (例如, Employees 当前休假的人员显示为紫色的前景。) 在某些情况下,创建转换器或使用转换器 DataTemplateSelector可能更合适。 有关详细信息,请参阅 数据模板化概述。

请注意,必须为数据触发器指定 Binding 属性和 Value 属性 DataTrigger 才能有意义。 如果未指定一个或两个属性,则会引发异常。

对象的 Setters 属性 DataTrigger 只能包含 Setter 对象。 向 Setter 对象添加子级 DataTrigger 会隐式将其添加到 SetterBaseCollection 对象中 DataTrigger 。 EventSetter 不支持对象;仅 Style.Setters 支持 EventSetter 对象。

在以下示例中ItemsSource,位置ListBox对象绑定到 Places 对象ObservableCollection。 放置 对象具有属性Name和State。

每个对象都显示 一个 Place 对象。ListBox 在本 Style 示例中应用于每个 ListBoxItem示例。

指定的DataTrigger是:

  1. 如果 State 为 “WA” ,则相应的ListBoxItem的Foreground将设置为“Red”。

  2. 如果Name为”Portland” 并且State为”OR”,则相应的Background将设置为”Cyan”。


  

  

  
    
      
      
    
  



  Data Trigger Sample
  

你可能感兴趣的:(wpf,wpf)