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

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



返回导读目录,阅读更多随笔



分割线,以下为博客签名:

软件臭虫情未了
  • 编码一分钟
  • 测试十年功


随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

原文地址:https://www.cnblogs.com/08shiyan/p/1822624.html