依赖项属性是标准.NET属性的全新实现——具有大量新增价值。在WPF的核心特性中需要嵌入依赖性属性。WPF元素提供的大多数属性都是依赖项属性。相对于创建依赖项属性,大多数情况下只是使用他们。当我们自定义控件时,会创建依赖属性。。现在通过自定义调音台控件介绍WPF中依赖属性的知识。
自定义控件调音台SingnalLight,实现功能(示例程序摘自 鱼哥的地盘)
public int ValueA
{
get { return (int)GetValue(ValueAProperty); }
set { SetValue(ValueAProperty,value); }
}
// Using a DependencyProperty as the backing store for ValueA. This enables animation,styling,binding,etc...
public static readonly DependencyProperty ValueAProperty =
DependencyProperty.Register("ValueA",typeof(int),typeof(SingnalLight),new PropertyMetadata(0));
第一步定义表示属性的对象,它是DependencyProject类的实例。
第二步是注册依赖属性。需要提供以下几个参数
//
// 摘要:
// 使用指定的属性名称、属性类型和所有者类型注册依赖项属性。
//
// 参数:
// name:
// 要注册的依赖项对象的名称。在所有者类型的注册命名空间内,名称必须是唯一的。
//
// propertyType:
// 属性的类型。
//
// ownerType:
// 正注册依赖项对象的所有者类型。
//
// 返回结果:
// 一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
public static DependencyProperty Register(string name,Type propertyType,Type ownerType);
//
// 摘要:
// 使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖项属性。
//
// 参数:
// name:
// 要注册的依赖项对象的名称。
//
// propertyType:
// 属性的类型。
//
// ownerType:
// 正注册依赖项对象的所有者类型。
//
// typeMetadata:
// 依赖项对象的属性元数据。
//
// 返回结果:
// 一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
public static DependencyProperty Register(string name,Type ownerType,PropertyMetadata typeMetadata);
//
// 摘要:
// 使用指定的属性名称、属性类型、所有者类型、属性元数据和属性的值验证回调来注册依赖项属性。
//
// 参数:
// name:
// 要注册的依赖项对象的名称。
//
// propertyType:
// 属性的类型。
//
// ownerType:
// 正注册依赖项对象的所有者类型。
//
// typeMetadata:
// 依赖项对象的属性元数据。
//
// validateValueCallback:
// 对回调的引用,除了典型的类型验证之外,该引用还应执行依赖项对象值的任何自定义验证。
//
// 返回结果:
// 一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。
public static DependencyProperty Register(string name,PropertyMetadata typeMetadata,ValidateValueCallback validateValueCallback);
另外有个小技巧,在VS中输入propdp会直接生成创建依赖项属性的代码,再通过简单的修改即可。
本文地址:http://www.jb51.cc/article/p-rziokaac-dx.html 2016年03月13日完成