依赖项属性

来源:互联网 发布:爱情动作片软件 编辑:程序博客网 时间:2024/06/05 04:47

概念:

       WPF有一套属性系统,它提供了服务扩展CLR原有的属性系统。经过扩展后的属性,以标签嵌套的方式存在于XAML里面。而这套WPF提供的属性系统,就是依赖项属性。

       它是通过.net的属性过程(property procedure)进行封装的。

 

定义和注册:

        定义依赖项属性,根据约定,要在普通的属性后面加上"Property“。

public class FrameworkElement:UIElement, IFrameworkInputElement, IInputElement, ISupportInitialize, IQueryAmbient

{

//①定义普通属性,包括了封装

public Thickness Margin

{

get { return (Thinkness) GetValue(MarginProperty); }

set { SetValue(MarginProperty,value); }

}

//②定义依赖项属性

public static readonly DependencyProperty 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(强制属性/强制事件)

注释:其中①,只能验证当前访问的属性,而③可以访问对象的多个属性。②是属性的值发生变化时,触发的事件。

触发顺序为:③,①,②

 

另外还有 共享依赖项属性,附加的依赖项属性

0 0
原创粉丝点击