2012-04-02 98 views
0

專家,無法通過樣式設置DependencyProperty值

我寫了一個名爲「DimensionLine」的自定義Shape,用於我的UI中的各個位置。形狀由兩端各有一個箭頭的線組成。它工作正常,但其中一個依賴項屬性不能通過樣式設置,我只是無法弄清楚我做錯了什麼。

這是代碼爲預計將無法正常工作的零件:

public class DimensionLine : Shape 
{ 
    public static readonly DependencyProperty ArrowsSizeProperty = 
     DependencyProperty.Register("ArrowsSize", typeof(Size), typeof(DimensionLine), 
      new FrameworkPropertyMetadata(new Size(10, 10), 
       FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure, 
       debug)); <-- I added this to listen for changes to the property ... 

    private static void debug(DependencyObject dObj, DependencyPropertyChangedEventArgs e) 
    { 
     // ERROR! this code never receives value from the Style. Why? 
    } 

    public Size ArrowsSize 
    { 
     get { return (Size) GetValue(ArrowsSizeProperty); } 
     set { SetValue(ArrowsSizeProperty, value); } 
    } 
} 

XAML:

<MyXaml.Resources> 
    <Style x:Key="SmallDimensionLine" TargetType="{x:Type cc:DimensionLine}" BasedOn="{StaticResource DimensionLine}"> 
     <Setter Property="ArrowsSize" Value="4,1.5" /> 
    </Style> 
</MyXaml.Resources> 

只是爲了確保我添加了一個回調偵聽器依賴項屬性元數據並通過斷點進行調試,但通過樣式指定的值不會寫入它。

是否還有其他需要完成的d-屬性使其變得更加符合樣式?

感謝

回答

1

你錯過創建一個新的WPF自定義控件

static DimensionLine() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(DimensionLine), 
     new FrameworkPropertyMetadata(typeof(DimensionLine))); 
} 
+0

添加該行代碼到構造並沒有幫助我害怕的時候,通常會自動添加靜態構造函數。另外,它不是從Shape派生的CustomControl。也許這是爲什麼?顯然我需要閱讀這個。不管怎麼說,還是要謝謝你。 – 2012-04-03 06:35:28

相關問題