依赖属性如何保持价值

Pra*_*ran 2 wpf dependency-properties .net-4.0 silverlight-4.0 c#-4.0

我用一个DP创建了一个用户控件.现在我在我的页面中使用该UC 5次,我的问题是,DP是一个静态属性,所以它只会创建一个实例.现在这个值将如何保存5个不同的控件?

gau*_*rma 9

每种类型都会创建依赖项属性,并且可以根据需要进行自定义.因此,如果您的屏幕有20个按钮,那么您所占用的属性的存储空间就像一个按钮一样好.

DependencyObject维护两个HashTable成员:

  • 一个静态

private static Hashtable _staticProperties = new Hashtable();

  • 另一个非静态的.

private Hashtable properties = new Hashtable();

静态成员存储DP的默认值(对于所有类型只有一个)和非静态成员存储已更改的值.

当你调用dp的SetValue方法时,你基本上是在非静态HashTable中添加一个项目.当调用GetValue时,DependencyObject首先检查非静态HashTable是否具有密钥; 如果找到然后返回值,否则它返回静态成员的值(这是默认值)

所以,

  • DP在更改之前不会保留任何值.

  • DP是静态的,因此您的应用可以观察其值; 这就是你注册DP而不是实例化的原因.

  • DP 在DependencyObject类中声明的HashTable中保存值,您需要在注册一个时传递所有者的类型.

您也可以在我的博客上看到它:Dependency Property如何保持价值