WPF 中最大的亮点当属 Binding 了,.NET 给我们提供了足够多的属性来让我们非常方便地进行数据绑定等操作。但即使如此,依然会有想编写自己的属性来进行 Binding 等操作。
在 WPF 中,微软将属性的概念延伸了一下,推出了“依赖属性”这个概念。所谓依赖属性,就是自己本身没有值而值是依赖别人的值。
为什么要使用依赖属性呢?举个例子,一个 TextBlock 有上百个属性,但是基本上我们常用的就是 Text 属性,当你在使用构造函数创建这个 TextBlock 的时候,这个实例的控件就已经被定下来了,随之而来的是大量不必要的空间浪费。而依赖属性,依赖别人的值而设定自己的值,这节省了大量不必要的空间浪费,而且可以方便的进行数据绑定,所以我们才要用依赖属性。
如何创建一个依赖属性呢?代码如下:
public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(string), typeof(Test));
首先依赖属性的访问权限可以是 public 或者 private 和 protected,但是如果是 private 或者 protected 的话,要想让外界访问,就需要给这个依赖属性添加一个 public 的属性访问器以暴露这个依赖属性,稍后会介绍如何给该依赖属性绑定一个 CLR 属性,当然你也可以自己写一个 CLR 属性来封装该依赖属性的值,但这样做会影响我们使用 Binding 等功能。
而 static 和 readonly 是必须的,所以即使你创建了一百个依赖对象,也仅占一个空间,当然这可能有点难以理解,静态的和只读的与我们正常使用依赖属性的情况完全不符,不过你可以暂时或略这里,这样写的原因不是本文想要讲的,我会在之后的博客里讲为什么这样写。
然后是 DependencyProperty ,这是依赖属性类,所以后面的 ContentProperty 就是这个对象了。这里有一个命名规则,就是依赖属性的对象名都已 Peoperty 结尾,这样就表明他是一个依赖属性,方便他人阅读和理