wpf学习笔记 依赖属性

临毕业进入长沙一家公司实习,项目比较紧,希望能利用下班前的一点时间做更多的学习,所以以后的内容都将十分简单,十五分钟搞定。

 依赖属性是WPF引入的新概念,基本形式如:

        public int MyProperty
        {
            get { return (int)GetValue(MyPropertyProperty); }
            set { SetValue(MyPropertyProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty"typeof(int), typeof(ownerclass), new UIPropertyMetadata(0),new ValidateValueCallback(ValidateValue)); 

内容比较长,可以利用snippet迅速地构建这段代码,即输入prop之后连续摁Tab,稍加修改后即可。

 我们通过Register方法的五个参数来了解依赖属性的内容。

简单的来说,可以把依赖属性当成是一个键值对表。第一个参数 

"MyProperty",与MyProperty是同名且联动的,即可理解为表中的键。第三个参数 
new UIPropertyMetadata(0) 即为值。其中
UIPropertyMetadata在这里以0为默认参数。

第二个参数指明了该属性值的类型,需要注意的是,

UIPropertyMetadata 中默认值的类型需要与此参数类型相同。第五个参数为验证方法。

第三个参数比较重要,其揭示了依赖属性的机制。我们所使用的控件都是一一继承的,一直可以追溯到最根部的元素。那么每一次继承时,都会将祖先的值保留下来,并继承下去,经过若干此继承,这个控件的内存占用就十分恐怖了。于是就有这套机制来解决这个问题。

wpf中子控件会直接读祖先的值,而不是复制。但这个子孙则无法重写覆盖某些值,wpf的依赖属性加入了子类的类型,并通过一定地运算来标识该类的属性,即 

typeof(ownerclass)。

 

posted @ 2012-02-20 21:48  shen6041  阅读(355)  评论(0编辑  收藏  举报