WPF依赖项属性
在.NET中属性和事件是.NET抽象模型的核心部分,但是在WPF中改变了这些基础的任何一个。依赖项属性使用更高效的保存机制,并且支持附加的功能。依赖项属性还是WPF许多重要功能的基础,包括动画、数据绑定以及样式。尽管改变了这些基础,但是在代码中仍然可以使用与读取和设置传统的.NET属性相同的方式来读取和设置依赖项属性。
依赖项属性是专门针对WPF创建的。但是WPF库中的依赖项属性都适用普通的.NET属性过程进行了包装。从而可以通过常规的方式使用它们,这正是WPF能够改变基础组成部分(如属性),而不会扰乱.NET领域中其他部分的原因。下面让我们来学习如何定义、注册和使用依赖项属性。
- 定义依赖项属性—定义表示属性的对象,它是DependencyProperty类的一个实例。属性信息应该始终保持可用,甚至可能需要在多个类之间共享这些信息。因此必须将Dependency Property对象定义为与之相关连的类的静态字段。根据约定,定义依赖项属性的字段的名称为在普通属性的末尾加上单词"Property"。根据这种命名方式可以明确区分出以来属性的定义。如下FrameworkElement类的Margin属性示例:
public class FrameworkElement:UIElement { public static readonly DependencyProperty MarginProperty; }
在此使用了readonly,这意味着只能在FramworElement类的静态构造换书中对其进行设置。
static FrameworkElement() { FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(new Thickness(), FrameworkPropertyMetadataOptions.AffectsMeasure); MarginProperty = DependencyProperty.Register("Margin", typeof(Thickness), typeof(FrameworkElement), metadata, new ValidateValueCallback(FrameworkElement.IsMarginValid)); }