2016-12-05 176 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

非常感谢。 工作就像一个魅力.. –