3.2.2变更通知
无论何时,只要WPF依赖属性的值发生改变,WPF就会自动根据属性的元数据触发一系列的动作,这些动作可以重新呈现适当的元素,更新当前布局,刷新数据绑定等。内建的变更通知最有趣的特性之一是属性触发器,它可以在属性值改变时执行自定义动作,而不用更改任何过程式代码。
假设你想实现:当鼠标指针移动到一个Button上时改变Button的背景色。
如果没有属性触发器的话:你必须注册两个事件,一个是MouseEnter 和 MouseLeave
XMAL部分的大概的代码段如下:
<Button MouseEnter = "" MouseLeave = "">help</Button>
而当有了属性触发器之后,你可以完全在XAML中完成相应的行为。下面的Trigger就是需要的全部代码:
<Trigger Property = "IsMouseOver" Value ="true">
<Setter Property ="Foreground" Value = "blue"/>
</Trigger>
这个触发器能够基于Button的IsMouseOver属性工作的,当MouseEnter时间触发时,IsMouseOver属性它会变成true,当MouseLeave触发时 IsMouseOver又会变成false。
【注意:当IsMouseOver 变成false时,不用把Foreground变成黑色,因为它是WPF自动完成的】
那么我们现在惟一需要做的就是把Trigger应用到每一个Button上,然后不幸的是,由于WPF3.0的人为限定不能把属性触发器【直接】应用到Button这样的元素上,他们只能在style 对象内部使用,但是我们可以这样做。
代码
<Button MinWidth = "75" Margin ="10" >
<Button.Style>
<Style TargetType = "{x:Type Button}">
<Style.Triggers>
<Trigger Property ="IsMouseOver" Value = "true">
<Setter Property = "Foreground"Value = "blue" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
OK
</Button>
属性触发器仅仅是WPF支持的3种触发器之一,数据触发器是属性触发器的另一种形式,它可以在任何.NET元素中工作,而不仅仅是依赖属性中。
事件触发器会通过声明方式指定动作,该动作在路由时间触发时生效。