这帮助我理解推理:
主要的区别是,正常的.NET属性的值直接从类中的私有成员读取,而DependencyProperty的值在调用从DependencyObject继承的GetValue()方法时动态地解析。
当设置依赖属性的值时,它不会存储在对象的字段中,而是存储在基类DependencyObject提供的键和值的字典中。条目的键是属性的名称,值是您要设置的值。
依赖属性的优点如下:
减少内存占用
当你认为UI控件的超过90%的属性通常保持其初始值时,存储每个属性的字段是一个巨大的耗散。依赖属性通过只在实例中存储修改的属性来解决这些问题。默认值在依赖属性中存储一次。
价值继承
当访问依赖属性时,使用值解析策略解析该值。如果未设置本地值,则依赖性属性将向上导航逻辑树,直到找到一个值。当您在根元素上设置FontSize时,它将应用于以下所有文本块,除非您覆盖该值。
更改通知
依赖属性具有内置的更改通知机制。通过在属性元数据中注册回调,当属性的值已更改时,您会收到通知。这也由数据绑定使用。
From:WPF Tutorials。