首页 > 代码库 > WPF编程宝典之依赖项属性(八)

WPF编程宝典之依赖项属性(八)

依赖项属性是专门针对WPF创建的,但WPF库中的依赖项属性都使用普通的.NET属性过程(property procedure)进行了封装。

 

1.定义依赖项属性

注:只能为依赖对象(继承自DependencyObject的类)添加依赖项属性。幸运的是,WPF基础结构的关键部分中的大部分都间接继承自DependencyObject类,最明显的例子就是元素。

依赖项属性需要在多个类之间共享信息,所以必须将DependencyProperty对象定义为与其相关联的类的静态字段。并且按照约定,依赖项属性的字段的名称是在普通属性的末尾处加上单词“Property”。

1 public class FrameworkElement
2 {
3     public static readonly DependencyProperty MarginProperty;
4 }

说明:

通过单词“Property”可从实际属性的名称中区分出依赖项属性的定义。

字段的定义使用了readonly关键字,这意味着只能在FrameworkElement类的静态构造函数中对其进行设置。

 

1.2注册依赖项属性

定义DependencyProperty对象只是第一步,使用依赖项属性,还需要使用WPF注册创建的依赖项属性,并且注册需要在任何使用属性的代码之前完成,因此必须在与其关联的类的静态构造函数中进行。

WPF确保DependencyProperty对象不能被直接实例化,因为DependencyProperty类没有公有的构造函数,只能使用静态的DependencyProperty.Register()方法创建DependencyProperty实例。

 

声明依赖项属性:

1 public static readonly DependencyProperty AttachContentProperty = DependencyProperty.RegisterAttached(
2     "AttachContent", typeof(ControlTemplate),typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));
  • 属性名:AttachContent;
  • 属性使用的数据类型:ControlTemplate
  • 拥有该属性的类型:ControlAttachProperty
  • 一个具有附加属性设置的FrameworkPropertyMetadata对象,该要素是可选的
  • 一个用于验证属性的回调函数,该要素是可选的

 

Get依赖项属性:

1 public static ControlTemplate GetAttachContent(DependencyObject d)
2 {
3     return (ControlTemplate)d.GetValue(AttachContentProperty);
4 }

Set依赖项属性:

1 public static void SetAttachContent(DependencyObject obj, ControlTemplate value)
2 {
3     obj.SetValue(AttachContentProperty, value);
4 }

 

WPF编程宝典之依赖项属性(八)