public class FrameworkElement : UIElement { public static readonly DependencyProperty MarginProperty; static FrameworkElement() { FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(new Thickness(), FrameworkPropertyMetadataOptions.None); MarginProperty = DependencyProperty.Register("Margin", typeof(Thickness), typeof(FrameworkElement), metadata, null); } public Thickness Margin { set { SetValue(MarginProperty, value); } get { return (Thickness)GetValue(MarginProperty); } } }
只能为依赖对象(继承自DependencyObject的类)添加依赖项属性。它是DependencyProperty类的实例,属性信息应该始终保持可用,甚至可能需要在多个类中共享这些信息,因此,必须将DependencyProperty对象定义为与之相关联的类的静态字段。根据约定,定义依赖项属性的字段的名称为在普通属性的末尾加上单词“Property”,且使用readonly关键字进行修饰。
DependencyProperty不能被直接实例化,因为DependencyProperty没有公有的构造函数,只能使用静态的DependencyProperty.Register()方法创建。
注册一个依赖项属性需要经过两个步骤,首先创建一个FrameworkPropertyMetadata对象,该对象希望通过依赖项属性使用什么服务。其次通过调用DependencyProperty.Register()静态方法注册属性,在这一步中需提供以下几个要素:
1) 属性名:在该示例中为Margin
2) 属性使用的数据类型:在该示例中为Thickness结构
3) 拥有该属性的类型:在该示例中为FrameworkElement类
4) 一个具有附加属性设置的 FrameworkPropertyMetadata对象,该要素是可选的
5) 一个用于验证属性的回调函数,该要素是可选的
FrameworkPropertyMetadata类的所有属性的说明如下:
QQ图片20140719183316" border="0" alt="QQ图片20140719183316" src="/Upload/Images/2014072012/6585CEB1F27291A8.jpg" width="244" height="103" />