触发器可以理解为,当达到了触发的条件,那么就执行预期内的响应,可以是样式、数据变化、动画等。触发器通过Style.Triggers集合连接到样式中,每个样式都可以有任意多个触发器,并且每个触发器都是System.Windows.TriggerBase的派生类实例,以下是触发器的类型:
Trigger:监测依赖属性的变化、触发器生效
Trigger类定义的属性
| Tirgger属性 | 说明 |
|---|---|
| Property Value | 使用属性触发器,Property和Value属性用于指定触发器的激活时间。例如,Property = “IsMouseOver” ,Value = “True” |
| Setters | 一旦激活触发器,就可以使用Setters定义一个Setter元素集合,来改变属性值。Setter类定义Property、TargetName和Value属性,已修改对象属性。 |
| EnterActions ExitActions | 除了定义 settm之 外,还可以定义 EnterActions 和 ExitActions。使用这两个属性,可以定义一个TriggerAction元素集合。EnterActions在启动触发器时激活(此时通过属性触发器应用Property/Value组合)。ExitActions在触发器结束之前激活(此时不再应用Property/Value组合) |
MultiTrigger:通过多个条件的设置、达到满足条件、触发器生效
MultiTrigger有一个Conditions属性,可以在其中设置属性的有效值。还有一个Setters属性,可以在其中指定需要设置的属性
DataTrigger:通过数据的变化、触发器生效
控件的外观及其功能在WPF中是完全分离的。虽然按钮有默认的外观,但可以用模板完全定制其外观。
WPF提供了几个模板类型,它们派生自基类FrameworkTemplate。
| 模板类型 | 说明 |
|---|---|
| ControlTemplate | 使用ControlTemplate可以指定控件的可视化结构,重新设计其外观 |
| ItemsPanelTemplate | 对于ItemsControl,可以赋予一个ItemsPanelTemplate,以指定其项的布局。每个ItemsControl都有一个默认的ItemsPanelTemplate。MenuItem使用WrapPanel,StatusBar使用DockPanel,ListBox使用VirtualizingStackPanel。 |
| DataTemplate | DataTemplates非常适用于对象的图形表示。给列表框指定样式,默认情况下,列表框中的项根据ToString()方法的输出来显示。应用DataTemplate,可以重写其操作,定义项的自定义表示 |
| HierarchicalDataTemplate | HierarchicalDataTemplate用于排列对象的树形结构。这个控件支持HierarchicalControls,如TreeViewItem和MenuItem |
控件模板用来定义控件的外观、样式,还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等。
ContentPresenter是控件内容的占位符,并定义了放置这些内容的位置。ContentPresenter的Content属性定义了内容的外观。