수색…


비고

입문 발언

WPF에서 스타일 은 주어진 시각적 요소에 대한 하나 이상의 종속성 속성 값을 정의합니다. 응용 프로그램에서 스타일을 사용하여 사용자 인터페이스의 일관성을 유지하고 (예 : 모든 대화 상자 단추의 크기를 일관되게 유지) 대량 변경을 쉽게 수행 할 수 있습니다 (예 : 모든 단추의 너비 변경).

스타일은 일반적으로 응용 프로그램의 높은 수준 (예 : App.xaml 또는 테마)의 ResourceDictionary 에 정의되어 있으므로 응용 프로그램 전체에서 사용할 수 있지만 단일 요소와 해당 하위 요소에 대해 정의 할 수도 있습니다. 스타일을 StackPanel 내의 모든 TextBlock 요소에 적용합니다.

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="5,5,5,0"/>
            <Setter Property="Background" Value="#FFF0F0F0"/>
            <Setter Property="Padding" Value="5"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="First Child"/>
    <TextBlock Text="Second Child"/>
    <TextBlock Text="Third Child"/>      
</StackPanel>

중요 노트

  • 스타일이 정의 된 위치는 사용할 수있는 위치에 영향을 미칩니다.
  • 정방향 참조는 StaticResource 확인할 수 없습니다. 다른 말로하면, 리소스 딕셔너리의 다른 스타일이나 리소스에 의존하는 스타일을 정의하는 경우, 의존하는 리소스의 뒤 / 아래에 정의해야합니다.
  • 런타임에 변경할 수있는 테마의 경우와 같이 DynamicResource 를 특별히 사용해야하는 경우가 아니면 StaticResource 를 사용하여 성능 및 동작상의 이유로 스타일 및 기타 리소스를 참조하는 것이 좋습니다.

자원

MSDN에는 여기서 제공 할 수있는 것보다 더 깊이있는 스타일과 리소스에 대한 철저한 기사가 있습니다.

명명 된 스타일 정의하기

명명 된 스타일은 x:Key 속성을 설정해야하며 명시 적으로 이름으로 참조하는 요소에만 적용됩니다.

<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="Yellow and bold!" Style="{StaticResource MyTextBlockStyle}" />
    <TextBlock Text="Also yellow and bold!" Style="{DynamicResource MyTextBlockStyle}" />
    <TextBlock Text="Plain text." />      
</StackPanel>

묵시적인 스타일 정의하기

암시 적 스타일은 범위 내의 주어진 유형의 모든 요소에 적용됩니다. 묵시적인 스타일은 스타일의 TargetType 속성과 묵시적으로 동일하기 때문에 x:Key 생략 할 수 있습니다.

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>

    <TextBlock Text="Yellow and bold!"  />
    <TextBlock Text="Also yellow and bold!" />
    <TextBlock Style="{x:Null}" Text="I'm not yellow or bold; I'm the control's default style!" />
</StackPanel>

스타일을 상속

특히 TextBlock 과 같은 컨트롤에 속한 여러 스타일간에 공유되는 속성 / 값을 정의하는 기본 스타일이 필요합니다. 이 작업은 BasedOn 속성을 사용하여 수행됩니다. 값은 상속 된 다음 재정의 될 수 있습니다.

<Style x:Key="BaseTextBlockStyle" TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource BaseTextBlockStyle">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>

위 예제에서 WarningTextBlockStyle 스타일을 사용하는 모든 TextBlock 은 빨간색과 굵게 12px Arial로 표시됩니다.

암시 적 스타일에는 TargetType 과 일치하는 암시 적 x:Key 가 있기 때문에이를 상속 할 수도 있습니다.

<!-- Implicit -->
<Style TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow