依赖项属性

前端之家收集整理的这篇文章主要介绍了依赖项属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概念:

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

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

触发顺序为:③,①,②

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

原文链接:https://www.f2er.com/javaschema/285889.html

猜你在找的设计模式相关文章