我剛剛開始玩WPF中的DependencyProperties,我想在檢查他們時檢查幾個想法。什麼是DependencyProperty的ownerType不是DependencyObject?
鑑於以下(現在忽略命名約定):
class MyTestClass
{
public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));
public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}
我發現,DP2拋出與我預期的消息「‘MyTestClass’類型必須自DependencyObject派生」一TypeInitializationException,但DP1是很高興地接受了。
現在,我明白爲什麼dp2引發異常,因爲我試圖在非DependencyObject類型上註冊屬性元數據,這很好。我已經看了下面的內容,並且可以看到dp1和dp2遵循的代碼路徑,所以我從代碼角度理解了爲什麼dp1不會引發異常,但從概念上講,我會期望dp1和dp2引發相同的異常。
我的問題是創建一個DependencyProperty,像dp1的ownerType不是一個DependencyObject的用途,因爲我不明白如何在DependencyObject上沒有GetValue/SetValue方法的情況下使用它。
嗨,謝謝你的回覆。我明白爲什麼ownerType可以設置爲任何對象,並且檢查是在運行時執行的。然而,我的問題是,爲什麼以下不會拋出一個運行時異常,因此在這種方式下創建DependencyProperty有什麼用處: DependencyProperty.Register(「MyProp」,typeof(String),typeof(MyTestClass)) ; – 2011-02-25 10:14:37
@Matt__E_:對不起,我會更精確地閱讀這個問題。我改變了我的答案。 BTW +1的問題。 – HCL 2011-02-25 10:50:52
嗨,HCL。非常感謝您花時間閱讀我的評論並再次回覆。我非常感謝。我認爲沒有用這種方式註冊dp1的有用的目的,但是因爲它沒有拋出異常,我認爲它必須有一個我沒有意識到的目的。感謝您確認它沒有任何用處。 – 2011-02-25 11:02:08