天天看点

第4章 依赖属性(1)——概述

一、概述

WPF使用更高级的依赖属性代替原来的.NET属性。依赖属性使用效率更高的保存机制,并支持附加功能,如更改通知以及属性值继承(在元素树中向下传播默认属性值的能力)。同时依赖属性也是WPF许多功能的基础,包括动画、数据绑定以及样式。

WPF元素提供的大多数属性都是依赖属性。因为这些依赖属性都使用普通的.NET属性进行了封装,所以使用和普通的.NET属性没有任何区别。

二、何时应定义依赖属性

将所有的属性都设置为依赖属性并不总是正确的解决方案,具体取决于其应用场景。有时,使用私有字段实现属性的典型方法便能满足要求。MSDN中给出了下面几种应用依赖属性的场景:

1. 希望可在样式中设置属性。

2. 希望属性支持数据绑定。

3. 希望可使用动态资源引用设置属性。

4. 希望从元素树中的父元素自动继承属性值。

5. 希望属性可进行动画处理。

6. 希望属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。

7. 希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。

说明:目前我使用最多的场景是前三条

三、WPF两个重要特性

通过后面的学习会慢慢发现,WPF的许多功能都需要使用依赖属性。但是,所有这些功能都是通过每个依赖属性支持的两个关键行为进行工作的——更改通知和动态值识别。

(1)更改通知

主要用于两个场景:元素绑定和属性触发器

(2)动态值识别

依赖属性因该行为而得名——本质上,依赖属性依赖于多个属性提供者,每个提供者都有各自的优先级。当从属性检索值时,WPF属性系统会通过一系列步骤获取最终值。

继续阅读