1. Dependency Properties依赖属性和CRL属性类似,提供一个实例级私有字段的访问封装,通过GetValue和 SetValue访问器实现属性的读写操作 最重要一个特点是属性值依赖于一个或者多个数据源,提供这些数据源的方式也可 以不同 由于依赖多数据源的缘故,故称之为依赖属性依赖属性就是一种自己可以没有值,并且可以通过Binding绑定从其他数据源获取值。依 赖属性可支持WPF中的样式设置、数据绑定DataGrid、继承、动画及默认值。 属性的场景希望可在样式中设置属性希望属性支持数据绑定希望可使用动态资源引用设置属性,希望从元素树中的父元素自动继承属性值,希望属性可进行动画处理,希望属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属 性以前的值时报告,希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是 否要求布局系统重新编写元素的可视化对象,无论什么时候,只要依赖属性的值发生改变,wpf就会自动根据属性的元数据触发一系列 的动作,这些动作可以重新呈现UI元素,也可以更新当前的布局,刷新数据绑定等等, 这种变更的通知最有趣的特点之一就是属性触发器,它可以在属性值改变的时候,执行 一系列自定义的动作,而不需要更改任何其他的代码来实现。通过下面的示例来演示属 性变更通知 示例:当鼠标移动到Button按钮上面时,文字的前景色变为红色,离开时变为默认颜色 黑色,采用传统方式和依赖属性两种方式实现。
2. WPF 编程中最常用的标记扩展是支持资源引用的标记扩展StaticResource 和 DynamicResource),和支持数据绑定的标记扩展 (Binding),StaticResource 通过替换已定义资源的值来为属性提供值。StaticResource 计算最 终在 XAML 加载时进行,并且在运行时没有访问对象图的权限。DynamicResource 通过将值推迟为对资源的运行时引用来为属性提供值。 动态资源 引用强制在每次访问此类资源时都进行新查找,且在运行时有权访问对象图。为了 获取此访问权限,WPF 属性系统中的依赖项属性和计算出的表达式支持 DynamicResource 概念。 因此,只能对依赖项属性目标使用 DynamicResource。 Binding 使用在运行时应用于父对象的数据上下文来为属性提供数据绑定值。 此标 记扩展相对复杂,因为它会启用大量内联语法来指定数据绑定。 RelativeSource 提供的源信息 Binding ,该信息可在运行时对象树中导航几个可能 的关系。对于在多用途模板中创建的绑定,或在未充分了解周围的对象树的情况下 以代码创建的绑定,此标记扩展为其提供专用源。 TemplateBinding 使控件模板能够使用模板化属性的值,这些属性来自于将使用该模 板的类的对象模型定义属性。 换言之,模板定义中的属性可访问仅在应用了模板之 后才存在的上下文。
目标对象将作为源对象绑定到自身 可以实现同一对象元素不同属性之间的绑定操作仅在ControlTemplate控件模板、DataTemplate 有效不同的模板,将返回不同类型的绑定结果。