给 PaddingProperty 一个默认值没有任何改变

Giving a default value to PaddingProperty changes nothing

我有一个派生自 System.Windows.Controls.Label 的 ExtendedLabel。 我想为 PaddingProperty 提供默认值。 我知道我可以为此目的使用 OverrideMetadata 方法。 但是有些方法不起作用,Padding 值仍然显示为 5,5,5,5(这是 Label 的默认值)。

然而,对于 Margin.

等其他属性,一切都按预期工作
    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);
    }
}

PS: 我不想在我的构造函数中设置 Padding。 因为这避免了其他开发人员从他们的样式中更改 Padding 值。

Padding值当然是由Label的默认Style设置的。

您可以通过在 Visual Studio 项目的 Themes 文件夹中创建名为 Generic.xaml 的 ResourceDictionary 来为您的 ExtendedLabel class 使用默认样式覆盖该值承载控件。

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)));
}