2014-03-12 31 views
1

我有一個UserControl,HorizontalContentAlignment的默認值是HorizontalAlignment.Stretch。在構造函數中,我將它設置爲HorizontalAlignment.Left覆蓋UserControl中的DependencyProperty

當我使用用戶控件,並給它的屬性HorizontalAlignment.Right在XAML,則該值被使用,即我不能重寫在構造函數中的值。

我可以覆蓋OnApplyTemplate,OnRenderLoaded事件中的屬性。

有這些我應該更喜歡嗎?
基本上我想避免有人可以改變usercontrols HorizontalContentAlignment

回答

1

使用dependency property coercion callback的屬性強制爲所需的值(即每次一個依賴屬性的值是要改變自動調用):

static YourUserControl() { 
    HorizontalContentAlignmentProperty.OverrideMetadata(
    typeof(YourUserControl), 
    new FrameworkPropertyMetadata(
     HorizontalAlignment.Stretch, 
     null, 
     CoerceHorizontalContentAlignment)); 
} 

private static object CoerceHorizontalContentAlignment(DependencyObject d, object baseValue) { 
    return HorizontalAlignment.Stretch; 
} 
+0

我接受它,在'Coerce'是正確的單詞使用。然而,它是更多的代碼,然後例如將它添加到'OnApplyTemplate'。有什麼理由更喜歡脅迫後者? – Gerard

+1

只要屬性值發生變化,就會調用強制回調。您不必通過調用來調用代碼,以在任何可能的地方或任何地方覆蓋用戶值(記住可以通過綁定或動畫更改屬性):這是一種通用解決方案。另外,強制意味着用戶將始終看到屬性的實際強制值(Stretch)。此外,強制不會覆蓋可能已在屬性上設置的任何綁定,並且如果需要,用戶指定的值將被存儲以備將來使用。 –

相關問題