source

스타일의 TargetType 속성을 기본 클래스로 설정

myloves 2023. 4. 13. 21:27

스타일의 TargetType 속성을 기본 클래스로 설정

나는 WPF를 조금 뒤적거리면서 내 윈도우의 모든 요소들이 같은 마진을 공유하길 원했다.마진을 가질 수 있는 모든 제어는 FrameworkElement에서 파생된다는 것을 알고 다음을 시도했습니다.

<Window.Resources>
<Style TargetType="{x:Type FrameworkElement}">
    <Setter Property="Margin" Value="10" />
</Style>
</Window.Resources>

그리고 이건 안 돼요.모든 버튼에 적용할 수 있지만 버튼에서 파생된 모든 요소에는 적용할 수 없습니다.제가 뭔가를 놓치고 있는 건가요 아니면 단순히 불가능한 건가요?

WPF에 CSS를 사용하는 것이 좋은 생각이었을까?

유감스럽게도 기본 FrameworkElement 유형에는 스타일을 적용할 수 없습니다.WPF에서는 스타일을 쓸 수 있지만 WPF에서 파생된 컨트롤에는 적용되지 않습니다.이는 FrameworkElement의 하위 유형에도 적용되는 것으로 보입니다. 예를 들어 Button/ToggleButton/RepeatButton의 슈퍼 유형인 ButtonBase가 해당됩니다.

상속을 계속 사용할 수 있지만 명시적 상속을 사용해야 합니다.BasedOn적용할 제어 유형에 적용할 구문입니다.

<Window.Resources>
    <Style TargetType="{x:Type FrameworkElement}">
        <Setter Property="Margin" Value="10" />
    </Style>

    <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />

</Window.Resources>

이 문제는 스타일을 검색할 때 WPF가 현재 클래스가 파생된 모든 클래스를 검색하지 않는다는 것입니다.그러나 스타일에 키를 지정하고 공통 특성을 가지려는 모든 요소에 적용할 수 있습니다.스타일 지정 중인 요소에 적용할 수 없는 스타일로 특성이 지정된 경우 무시됩니다.

언급URL : https://stackoverflow.com/questions/1026635/setting-a-styles-targettype-property-to-a-base-class