零起点学习WPF之《WPF揭秘》读书笔记(7)——第三章 变更通知

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元素中工作,而不仅仅是依赖属性中。

事件触发器会通过声明方式指定动作,该动作在路由时间触发时生效。

你可能感兴趣的:(读书笔记)