Q:

Giving a default value to PaddingProperty changes nothing

I have an ExtendedLabel which derives from System.Windows.Controls.Label.
I want to give default value for PaddingProperty.
I know that I can use OverrideMetadata method for this purpose.
But some how it doesn't work, Padding vallue still appears as 5,5,5,5 (which is default value for Label).
However everything works as expected for other properties like 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:
I don't want to set Padding at my constructor.
Because this avoids other developers from changing Padding value from their styles.  

A:

The Padding value is certainly set by the Label's default Style.
You may overwrite that value by a default Style for your ExtendedLabel class, by creating a ResourceDictionary called Generic.xaml in a Themes folder in the Visual Studio project that hosts the control.
Generic.xaml would contain a Style like this:
<Style TargetType="local:ExtendedLabel" BasedOn="{StaticResource {x:Type Label}}">
    <Setter Property="Padding" Value="0"/>
</Style>

and it would be registered as default Style like this:
static ExtendedLabel()
{
    DefaultStyleKeyProperty.OverrideMetadata(
        typeof(ExtendedLabel),
        new FrameworkPropertyMetadata(typeof(ExtendedLabel)));
}

