2016-12-05 179 views
0

我有一個從System.Windows.Controls.Label派生的ExtendedLabel。 我想爲PaddingProperty提供默認值。 我知道我可以爲此使用OverrideMetadata方法。 但有些如何不起作用,填充 vallue仍然顯示爲5,5,5,5(這是標籤的默認值)。給PaddingProperty默認值不會改變

然而,一切正常預期的其他性能如保證金

class ExtendedLabel : Label 
{ 
    static ExtendedLabel() 
    { 

     PaddingProperty.OverrideMetadata(typeof(ExtendedLabel), new FrameworkPropertyMetadata(new Thickness(0))); 
     MarginProperty.OverrideMetadata(typeof(ExtendedLabel), new FrameworkPropertyMetadata(new Thickness(0, 10, 0, 20))); 
    } 

    public ExtendedLabel() 
    { 
    // this.Padding = new Thickness(0); 
    } 
} 

Property Values on runtime (using snoop tool)

PS: 我不希望在我的構造函數來設置填充。 因爲這避免了其他開發人員從其樣式中更改填充值。

回答

1

Padding值肯定是由標籤的默認樣式設置的。

您可以通過在承載該控件的Visual Studio項目的Themes文件夾中創建名爲Generic.xaml的ResourceDictionary來爲ExtendedLabel類覆蓋該值。

Generic.xaml將包含這樣的風格:

<Style TargetType="local:ExtendedLabel" BasedOn="{StaticResource {x:Type Label}}"> 
    <Setter Property="Padding" Value="0"/> 
</Style> 

一下子就被註冊爲默認的風格是這樣的:

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

非常感謝。 工作就像一個魅力.. –