标签:
class MyClass : DependencyObject { public static readonly DependencyProperty MyfieldProperty = DependencyProperty.Register("Myfield", typeof(int), typeof(MyClass), new PropertyMetadata(0), new ValidateValueCallback(new MyClass().MyValidateMethod)); public int Myfield { get { return (int)GetValue(MyfieldProperty); } set { SetValue(MyfieldProperty, value); } } public bool MyValidateMethod(object value) { return true;//这里实现验证 } }
Register方法有三种重载
Register(String, Type, Type) 使用指定的属性名称、属性类型和属性所在对象的类型。
Register(String, Type, Type, PropertyMetadata) 使用指定的属性名称、属性类型、属性所在对象的类型和属性元数据注册依赖项属性。
Register(String, Type, Type, PropertyMetadata, ValidateValueCallback) 使用指定的属性名称、属性类型、属性所在对象的类型、属性元数据和属性的值验证回调来注册依赖项属性。
在Register中,各个参数解释如下:
String:依赖属性的名字(不加Property,即字段的名字);
Type:属性的类型;
Type:属性所属对象的类型;
PropertyMetadata:依赖项对象的属性元数据,是一个PropertyMetadata类型,可能赋初始值。PropertyMetadata有一个object的构造函数;
ValidateValueCallback:表示用作回调的方法,这个类型是一个委托,用于验证依赖项属性的值的有效性,因为是委托,故它的构造参数为一个方法名。
最后,来构造依赖属性,与普通的属性有所区别:
Public 属性类型 属性名
{
Get {return (属性类型)this.GetValue(字段名); }
Set {this.SetValue(字段名, value); }
}
其中的GetValue和SetValue都是调用父类DependencyObject的方法。
标签:
原文地址:http://www.cnblogs.com/gaowen/p/4842446.html