谈WPF中的附加属性
2016-01-11 16:17
309 查看
附加属性,顾名思义,就是一个原本不属于某个对象,但是由于某种需要或环境,而附加在一个对象上的属性,
也就是把对象放入一个特定的环境下,对象才会拥有的属性,成为附加属性。
在实际的开发中,在设计数据库关系或实体类的时候就会遇到这样的问题。
例如,有个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属性两个方法。
也就是把对象放入一个特定的环境下,对象才会拥有的属性,成为附加属性。
在实际的开发中,在设计数据库关系或实体类的时候就会遇到这样的问题。
例如,有个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属性两个方法。
相关文章推荐
- 由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
- mysql字段名称 不要设置为index
- speech recognition with deep recurrent neural networks-论文笔记
- 那些年我们一起清除过的浮动
- linuxc时间函数
- Ceph学习----Ceph rbd 作为设备挂载到本地
- 总结的一些iOS App审核被拒的经历.
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- [ACM] hdu 4405 Aeroplane chess (概率DP)
- js 得到当前季度
- LeetCode 26 - Remove Duplicates from Sorted Array
- html code
- PHP实现基于文本的摩斯电码生成器
- 【Redis笔记(一)】 环境配置
- Selenium的PO模式
- 拦截API 注入进程
- 关于button的背景图片全屏以及取消按下的效果
- 修改UISearchBar背景颜色
- 正弦波近似 http://blog.csdn.net/ring0hx/article/details/44492415
- jQuery Mobile 页面事件总结