2016-12-05 9 views
0

У меня есть ExtendedLabel, который происходит из System.Windows.Controls.Label. Я хочу указать значение по умолчанию для PaddingProperty. Я знаю, что для этой цели я могу использовать метод OverrideMetadata. Но некоторые как это не работает, Padding 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: Я не хочу, чтобы установить Перетяжка в моем конструкторе. Потому что это позволяет другим разработчикам изменять Padding ценность от их стилей.

ответ

1

Значение по умолчанию Padding определяется стилем по умолчанию для метки.

Вы можете перезаписать это значение по умолчанию для своего класса ExtendedLabel, создав ResourceDictionary с именем Generic.xaml в папке Themes в проекте Visual Studio, в котором находится элемент управления.

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

Спасибо большое. Работал как шарм .. –