常规依赖项属性返回值(即使它尚未为类定义)
问题描述:
我为A类定义了依赖项属性。但是,我可以在B的一个实例中查询该属性的值。为什么?常规依赖项属性返回值(即使它尚未为类定义)
为了说明,看起来这个代码(WPF):
using System.Windows;
namespace Sample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var propDefinedForA = DependencyProperty.Register("SomeProperty", typeof(int), typeof(A), new PropertyMetadata(defaultValue: 10));
var b = new B();
var value = b.GetValue(propDefinedForA);
}
}
public class A: DependencyObject
{
}
public class B: DependencyObject
{
}
}
此代码的执行之后,将值为10。这是为什么甚至可能吗?我没有定义DP为B类,而是为A.
这种行为的原因是什么?
答
从Understanding WPF Dependency Property and Attached Property:
依赖项属性
这是WPF属性系统,尽管这是一个属性,它不是 一样普通的属性。这些属性未存储在内部字段中,但存储在内部存储系统中, 存储属性的每个实例值。
依赖属性是一个公共静态只读字段,必须首先注册 。在注册后,此静态 属性用于获取和设置内部存储器 系统中的值。
附加属性
这也是依赖属性。内部存储系统采用 DependencyProperty作为获取和设置值的关键。附属属性 允许对象使用属于另一个 类的键存储值。
想象一下,WPF财产制是一个财产包,而财产包 可以采取任何类型的值。在大多数情况下,这个属性包的关键是在类本身中定义的,但对于附加属性,其他类中定义了关键字 。
基本上使用附加属性可以定义控件的属性不访问其内部状态,或者你不能改变他们的源代码。