2017-09-02 37 views
0

我为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.

这种行为的原因是什么?

回答

0

Understanding WPF Dependency Property and Attached Property

依赖项属性

这是WPF属性系统,尽管这是一个属性,它不是 一样普通的属性。这些属性未存储在内部字段中,但存储在内部存储系统中, 存储属性的每个实例值。

依赖属性是一个公共静态只读字段,必须首先注册 。在注册后,此静态 属性用于获取和设置内部存储器 系统中的值。

附加属性

这也是依赖属性。内部存储系统采用 DependencyProperty作为获取和设置值的关键。附属属性 允许对象使用属于另一个 类的键存储值。

想象一下,WPF财产制是一个财产包,而财产包 可以采取任何类型的值。在大多数情况下,这个属性包的关键是在类本身中定义的,但对于附加属性,其他类中定义了关键字 。

基本上使用附加属性可以定义控件的属性不访问其内部状态,或者你不能改变他们的源代码。