博客里面牛人太多了,有很多好的文章。
刚才看了一下一篇;介绍的很好,记录了一部分以后会用到的知识点;
引入依赖属性的目的:
1新功能的引入;
2节约内存;
3支持多个提供对象;
实现方法:
第一步: 让所在类型继承自 DependencyObject基类,在WPF中几乎所有的 WPF 控件都间接继承自DependencyObject类型。
第二步:声明:使用 public static 声明一个 DependencyProperty的变量,该变量才是真正的依赖属性 ,这里其实用了简单的单例模式的原理进行了封装(构造函数私有),只暴露Register方法给外部调用。
第三步:注册:在静态构造函数中完成依赖属性的元数据注册,并获取对象引用,把刚才声明的依赖属性放入到一个类似于容器的地方,没有讲实现原理之前,请容许我先这么陈述。
第四步:实现:怎样才能对这个依赖属性进行读写呢?答案是提供一个依赖属性的实例化包装属性,通过这个属性来实现具体的读写操作。
public class SampleDPClass : DependencyObject { //声明一个静态只读的DependencyProperty字段 public static readonly DependencyProperty SampleProperty; static SampleDPClass() { //注册我们定义的依赖属性Sample SampleProperty = DependencyProperty.Register("Sample", typeof(string), typeof(SampleDPClass), new PropertyMetadata("Knights Warrior!", OnValueChanged)); } private static void OnValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { //当值改变时,我们可以在此做一些逻辑处理 } //属性包装器,通过它来读取和设置我们刚才注册的依赖属性 public string Sample { get { return (string)GetValue(SampleProperty); } set { SetValue(SampleProperty, value); } } }
总结:我们一般.NET属性是直接对类的一个私有属性进行封装,所以读取值的时候,也就是直接读取这个字段;而依赖属性则是通过调用继承自DependencyObject的GetValue()和SetValue来进行操作,它实际存储在DependencyProperty的一个IDictionary的键-值配对字典中,所以一条记录中的键(Key)就是该属性的HashCode值,而值(Value)则是我们注册的DependencyProperty。
附加属性
附加属性是一种特殊的依赖属性。他允许给一个对象添加一个值,而该对象可能对此值一无所知。
详细http://www.cnblogs.com/knightswarrior/archive/2010/08/27/1809739.html