依赖项属性
概念: WPF有一套属性系统,它提供了服务扩展CLR原有的属性系统。经过扩展后的属性,以标签嵌套的方式存在于XAML里面。而这套WPF提供的属性系统,就是依赖项属性。 它是通过.net的属性过程(property procedure)进行封装的。 定义和注册: 定义依赖项属性,根据约定,要在普通的属性后面加上"Property“。 public classFrameworkElement:UIElement,IFrameworkInputElement,IInputElement,ISupportInitialize,IQueryAmbient { //①定义普通属性,包括了封装 public Thickness Margin { get { return (Thinkness) GetValue(MarginProperty); } set { SetValue(MarginProperty,value); } } //②定义依赖项属性 public static readonlyDependencyProperty MarginProperty; //③注册依赖项属性 FrameworkPropertyMetadata metadata = new FramworkPropertyMetadata(new Thickness(), FrameworkPropertyMetadataOptions.AffecttMesure); MarginProperty = DependencyProperty.Register("Margin",//属性名称 typeof(Thickness),//属性的类型 typeof(FramworkElement),//属性的使用者 metadata,//可选,带有附加属性的FrameworkPropertyMetadatad对象 new ValidateValueCallback(FrameworkElement,IsMarginValid));//验证的回调函数 } //④ 属性验证的回调函数 private static bool IsMarginValid(object value) { Thinkness t = (Thinkness)value; return t.IsValid(true,false,true,false); } 强制属性 这里要理解一个回调函数和两个FrameworkPropertyMetadata的属性,分别是 ①ValidateValueCallback(属性验证) ②PropertyChangedCallback(值变更事件)③CoerceValueCallback(强制属性/强制事件) 注释:其中①,只能验证当前访问的属性,而③可以访问对象的多个属性。②是属性的值发生变化时,触发的事件。 触发顺序为:③,①,② 另外还有 共享依赖项属性,附加的依赖项属性 等 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |