到 所 期 望 的 结 果 。 问 题 是 尽 管 Button.FontFamily 属 性 和 TextBlock.FontFamily 属性是在它们各自的基类中分别定义的, 但它们都引用同一个依赖项属性 (换句话说,TextBlock.FontSizeProperty 属性引用和 Control.FontSizeProperty 属性引用都指向同 一个 DependencyProperty 对象。在第 6 章已学习了这个问题)。所以,当使用这个样式时,WPF 设置 FontFamily 属性和 FontSize 属性两次。最后应用的设置(对于该示例,是 10 个单位大小的 Arial 字体)具有优先权,并且被同时应用到 Button 对象和 TextBlock 对象。尽管这个问题非常 明确,但是对于许多属性并不存在该问题,如果经常为不同的元素类型创建应用不同格式的样 式,分析是否会存在这一问题就显得很重要了。 还可以使用另外一种技巧来简化样式声明。如果所有的属性都准备用于相同的元素类型, 可以设置 Style 对象的 TargetType 属性,指定准备应用属性的类。例如,如果创建只应用于按 钮的样式,可以按如下方式创建样式:
这样做相对方便一些。正如后面所分析的,如果不使用样式键名,TargetType 属性还可以 作为自动应用样式的快捷方式。
12.1.3
关联事件处理程序
属性设置器是所有样式中最常见的要素,但是也可以创建为事件关联特定事件处理程序的 EventSetter 对象的集合。下面是一个示例,为 MouseEnter 事件和 MouseLeave 事件关联事件处 理程序:
下面是事件处理代码:
private void element
_MouseEnter(object sender, MouseEventArgs e) { ((TextBlock)sender).Background = new SolidColorBrush(Colors.LightGoldenrodYellow); }
293
WPF 编程宝典— 使用 C# 2008 和.NET 3.5(第 2 版) —
pri