2017-09-02 93 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財產製是一個財產包,而財產包 可以採取任何類型的值。在大多數情況下,這個屬性包的關鍵是在類本身中定義的,但對於附加屬性,其他類中定義了關鍵字 。

基本上使用附加屬性可以定義控件的屬性不訪問其內部狀態,或者你不能改變他們的源代碼。