C# WP7中依赖属性的内部结构

C# WP7中依赖属性的内部结构,c#,windows-phone-7,dependency-properties,C#,Windows Phone 7,Dependency Properties,阅读之后,我想知道在Silverlight for WP7中如何实现依赖性属性。在调查中,使用了来自的反射器和DLL 在WPF中: DependencyProperty维护所有属性的静态引用 在WPF对象层次结构中注册的DependencyProperty。它认为 名为PropertyFromName的哈希表,它在内部使用该哈希表来获取 DependencyProperty对象。换句话说,每个从属属性 对象在全局哈希表中注册 在Silverlight for WP7 DependencyProp

阅读之后,我想知道在Silverlight for WP7中如何实现依赖性属性。在调查中,使用了来自的反射器和DLL

在WPF中:

DependencyProperty维护所有属性的静态引用 在WPF对象层次结构中注册的DependencyProperty。它认为 名为PropertyFromName的哈希表,它在内部使用该哈希表来获取 DependencyProperty对象。换句话说,每个从属属性 对象在全局哈希表中注册

在Silverlight for WP7 DependencyProperties中,属性具有几乎相同的全局哈希表(实际上是这样的)

static Dictionary<Type, Dictionary<string, DependencyProperty>> _registeredProperties 
static Dictionary\u registeredProperties
)

但是在查看DependencyObject类的GetValue和SetValue方法的源代码之后,我发现根本没有使用registeredProperties

有人知道为什么要这样实施吗?或者我错过了什么?
提前谢谢你。

我想你确实错过了什么。
\u registeredProperties
字典(以及WPF中的等效字典)用于按其名称检索依赖项属性。它主要用于绑定机制(框架必须从类似
{binding Path=PropertyName}
的表达式中检索DP)


当您在
GetValue
SetValue
中时,您已经有了对DP的引用(它是方法的第一个参数)。因此,
\u registeredProperties
在那里是无用的
GetValue
SetValue
都使用另一个类型为
dictionary
的字典
\u valueTable
\u valueTable
是将值与DP关联的实际集合。

你说得对,@KooKiz。谢谢也许您还知道为什么CoreDependencyProperty的值通过使用本机调用存储在某处,而CustomAttachedDependencyProperty和CustomDependencyProperty的值存储在DependencyObject类的_valueTable字段中?不能确定。这可能是因为有些控件,比如WebBrowser,只是本地控件的包装。因此,这些控件可能更容易具有本机依赖属性。