谈WPF中的附加属性

来源:互联网 发布:mysql手工注入 编辑:程序博客网 时间:2024/05/16 16:02

附加属性,顾名思义,就是一个原本不属于某个对象,但是由于某种需要或环境,而附加在一个对象上的属性,

也就是把对象放入一个特定的环境下,对象才会拥有的属性,成为附加属性。

在实际的开发中,在设计数据库关系或实体类的时候就会遇到这样的问题。

例如,有个Student的类,他会有属性来标记他所在的学校、班级、年级,

public class Student

{

string ID;

string Name;


string classID;

string schoolID;

string MajorID;

}

假如他去找实习,那么这个类就要进行扩展,加入他实习所在部门ID;

public class Student

{

string ID;

string Name;


string classID;

string schoolID;

string MajorID;


string DepartmentID;

}


也就是说只要环境一有所变化,那么这个类的实现就要做改变,

而且如果有些学生没有出去实习,那么这个DepartmentID所占的内存就被浪费掉了。

再举个例子。

在WPF中我们常用的textbox 控件,它可以放置在stackpanel,dockpanel,grid中,分别放置在这些容器时,需要有属性设置Textbox 放置的位置,

stackpanel最省事,但是放置在dockpanel时,就需要设置dockpanel.dock属性,放置在grid中需要设置grid.row,grid.column,

而作为Textbox的最初设计者,他压根不知道控件将会放在什么地方,

所以根本不会准备属性去存放以上所提到的属性的值,但这些属性是必须要设的啊,怎么办呢?

能不能在控件被使用的过程中,再去附加一些属性值呢,这就是附加属性啦。

附加属性的作用,就是将属性和宿主剥离开,让数据类的实现更加灵活。

附加属性如何定义,就不用多说了,任何一本讲wpf的都有详细讲解。

这里想要提到一个与依赖属性不同的地方,依赖属性将一个和依赖属性同名的属性(去掉Property),包装成CLR属性。

附加属性的包装器是使用两个静态的方法分别包装Get属性和Set属性两个方法。




0 0