수색…
비고
입문 발언
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>