2011-05-01 36 views
3

我正在創建一個自定義的WPF控件,這是不是 UserControl。這個自定義控件有兩個屬性(UnselectedAppearance和SelectedAppearance)。這兩個屬性都是來自DependencyObject的相同類型(外觀)。 Appearance類有幾個DependencyProperties本身。我想知道爲每個外觀屬性設置默認值的正確方法。我試過了類似下面的代碼,但是當我嘗試在設計器中使用自定義控件時會拋出異常。如何設置從DependencyObject派生的類型的DependencyProperty的默認值

public static readonly DependencyProperty UnselectedAppearanceProperty = DependencyProperty.Register("UnselectedAppearance", typeof(Appearance), typeof(FNDie), new PropertyMetadata(new Appearance())); 

有什麼辦法可以做到這一點嗎?

回答

1

您應該初始化您調用的構造函數中的所有非依賴項屬性(這裏是默認的無參數屬性)。依賴屬性可以被賦予一個默認值,就像你正在做的那樣new PropertyMetadata(new Appearance());

3

依賴項屬性的缺省值在該依賴項對象的所有實例之間共享,因此非空值通常只對值類型或不可變類有意義。換句話說,你可能會學到很難,空值可能是你最好的選擇。

如果您迫切需要爲依賴屬性設置可變引用值,則可以將默認值保留爲空值並將其設置在構造函數中。但是,您應該意識到這樣做會使該屬性無法使用樣式進行設置,這可能是一個嚴重的限制,具體取決於您的需要。

+0

是是,是的。我處於嚴重的限制階段,需要將DependencyProperty默認值設置爲Silverlight 5中的引用類型,它沒有SetCurrentValue(),它可以在WPF中執行 – 2014-04-29 15:19:02

2

你需要使用屬性元數據這樣

class MyValidation 
{ 

    public bool status 
     { 
      get { return (bool)GetValue(statusProperty); } 
      set { SetValue(statusProperty, value); } 
     } 

     public static readonly DependencyProperty statusProperty = 
      DependencyProperty.Register("status", typeof(bool), typeof(MyValidation),new PropertyMetadata(false)); 

} 
相關問題