WPF使用依赖项属性的方式
通过依赖项属性的连个关键行为进行工作——更改通知和动态值识别。
当属性值发生变化是,依赖项属性不会自动引发事件以通知属性值发生了变化,而是会触发受保护的名为OnPropertyChangedCallback()的方法。该方法通过两个WPF服务(数据绑定和触发器)传递信息,并调用PropertyChangedCallback回调函数(如果已经定义了该函数)
换句话说,当属性变化时,如果希望进行相应,有两种选择,可以使用属性值创建绑定,也可以编写能够自动改变其他属性或开始动画的触发器
依赖项属性确定基本值的优先级(优先级从低到高)
1. 默认值(由FrameworkPropertyMetadata对象设置的值)
2. 继承而来的值(假设设置了FrameworkPropertyMetadata.Inherits标志,并为包含层次中的某个元素提供了值)
3. 来自主题样式的值
4. 来自项目样式的值
5. 本地值
WPF按照上面列表确定依赖项属性的基本值,但基本值未必就是最后从属性中检索到的值,这是因为WPF还需要考虑其他几个可能改变属性的提供者:
下面列出WPF决定属性值的四个步骤过程:
1. 确定基本值
2. 如果属性是使用表达式设置的,就对表达式进行求值,当前WPF支持两类表达式,数据绑定和资源
3. 如果属性是动画的目标,就应用动画
4. 运行CoerceValueCallback回调函数来修正属性值