加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖项属性

发布时间:2020-12-13 23:15:41 所属栏目:百科 来源:网络整理
导读:概念: WPF有一套属性系统,它提供了服务扩展CLR原有的属性系统。经过扩展后的属性,以标签嵌套的方式存在于XAML里面。而这套WPF提供的属性系统,就是依赖项属性。 它是通过.net的属性过程(property procedure)进行封装的。 定义和注册: 定义依赖项属性,

概念:

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

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

触发顺序为:③,①,②

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读