WPF에서 스타일과 리소스를 효율적으로 관리하기 위해 알아두면 좋은 기능들을 정리한 문서입니다. 이 문서는 애플리케이션의 유지보수성과 확장성을 높이는 데 유용합니다.
리소스(스타일, 브러시, 템플릿 등)를 분리하여 재사용 가능하게 만듭니다.
기본 사용법
<ResourceDictionary>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Blue"/>
</Style>
</ResourceDictionary>
외부 파일로 분리
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/Buttons.xaml"/>
</ResourceDictionary.MergedDictionaries>
StaticResource
<Button Background="{StaticResource PrimaryBrush}"/>
DynamicResource
<Button Background="{DynamicResource PrimaryBrush}"/>
스타일을 상속받아 기존 스타일을 확장하거나 수정할 수 있습니다.
<Style x:Key="BaseButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Gray"/>
</Style>
<Style x:Key="PrimaryButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Background" Value="Blue"/>
</Style>
x:Shared="true")하지만, 별도 인스턴스가 필요한 경우 x:Shared="false"를 설정합니다.<SolidColorBrush x:Key="MyBrush" Color="Red" x:Shared="false"/><!-- 특정 컨트롤 유형에 대한 기본 스타일 -->
<Style TargetType="Button">
<Setter Property="Background" Value="Green"/>
</Style>데이터 트리거
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="False">
<Setter Property="Opacity" Value="0.5"/>
</DataTrigger>
</Style.Triggers>
</Style>
이벤트 트리거
<Style TargetType="Button">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Background).Color" To="Red" Duration="0:0:0.3"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
<ControlTemplate TargetType="Button">
<Grid>
<Rectangle Fill="{TemplateBinding Background}"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate><ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/LightTheme.xaml"/>
<ResourceDictionary Source="Themes/DarkTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary><Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="GlobalStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources><Style TargetType="Button">
<Setter Property="Background" Value="Green"/>
</Style><VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Background).Color" To="Blue"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups><Button local:CustomProperties.IsImportant="True"/>위의 기능들은 WPF 애플리케이션의 스타일링 및 리소스 관리를 최적화하는 데 중요한 도구입니다. 이를 조합하여 코드의 가독성과 유지보수성을 높이고, 확장 가능한 구조를 설계할 수 있습니다.