2016-12-05 7 views
0

System.Windows.Controls.Label에서 파생 된 ExtendedLabel이 있습니다. PaddingProperty의 기본값을 지정하려고합니다. 이 목적을 위해 OverrideMetadata 메서드를 사용할 수 있다는 것을 알고 있습니다. 그러나 어떻게 작동하지 않는지, 채우기 vallue는 여전히 5,5,5,5 (Label의 기본값)으로 나타납니다.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 프로젝트의 폴더에 ResourceDictionary라는 Generic.xaml을 작성하여 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

덕분에 많이. 매력처럼 작동 .. –