24
WPF의 Resources(리소스)는 애플리케이션 내에서 재사용할 수 있는 오브젝트나 값을 정의하는 기능을 제공합니다. 리소스를 사용하면 스타일, 브러시, 데이터 템플릿 등 다양한 오브젝트를 중앙에서 관리하고, 중복을 줄이며 일관된 UI 디자인을 유지할 수 있습니다.
리소스는 특정 컨트롤, 창, 또는 애플리케이션 전역에서 사용할 수 있도록 선언될 수 있습니다. WPF 리소스는 StaticResource
또는 DynamicResource
마크업 확장을 통해 참조됩니다.
리소스의 종류
- StaticResource: 리소스가 처음 로드될 때 정적으로 참조됩니다. 리소스가 변경될 경우 UI는 자동으로 업데이트되지 않습니다.
- DynamicResource: 리소스가 동적으로 참조되며, 리소스가 변경될 때 UI가 자동으로 업데이트됩니다.
리소스의 정의 위치
- Window 또는 UserControl의 리소스: 특정 XAML 파일 내에서만 사용 가능합니다.
- Application 리소스:
App.xaml
에 정의되며, 애플리케이션 전역에서 사용할 수 있습니다. - FrameworkElement 리소스: 특정 컨트롤이나 레이아웃에 국한된 리소스입니다.
리소스의 활용 예시
리소스를 사용하여 버튼의 스타일과 색상을 재사용하는 예시를 보겠습니다.
1. Window 수준의 리소스 예시
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Resource Example" Height="200" Width="400">
<Window.Resources>
<!-- 브러시 리소스 -->
<SolidColorBrush x:Key="ButtonBackgroundBrush" Color="LightBlue" />
<!-- 스타일 리소스 -->
<Style x:Key="CustomButtonStyle" TargetType="Button">
<Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="FontSize" Value="16" />
<Setter Property="Margin" Value="5" />
</Style>
</Window.Resources>
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content="Click Me" Style="{StaticResource CustomButtonStyle}" />
<Button Content="Press Here" Style="{StaticResource CustomButtonStyle}" />
</StackPanel>
</Grid>
</Window>
실행 결과
코드 설명
<Window.Resources>
: 이 섹션 안에 정의된 리소스는Window
내에서 사용 가능합니다.<SolidColorBrush>
:ButtonBackgroundBrush
라는 키로 정의된 브러시는 버튼의 배경색으로 사용됩니다.<Style>
:CustomButtonStyle
이라는 키를 가진 스타일 리소스는Button
컨트롤에 적용됩니다. 이 스타일은 버튼의 배경색, 글자색, 폰트 크기, 마진을 설정합니다.StaticResource
: 버튼의 스타일을 설정할 때StaticResource
를 사용하여 리소스를 참조합니다.
Application 수준의 리소스 예시
리소스를 App.xaml
에 정의하면 애플리케이션 전역에서 사용할 수 있습니다.
App.xaml
<Application x:Class="WpfApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<SolidColorBrush x:Key="GlobalBackgroundBrush" Color="LightCoral" />
</Application.Resources>
</Application>
MainWindow.xaml
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Resource Example" Height="200" Width="400"
Background="{StaticResource GlobalBackgroundBrush}">
<Grid>
<TextBlock Text="Hello, WPF!" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</Window>
실행 결과
코드 설명
<Application.Resources>
: 애플리케이션 전역에서 사용할 수 있는 리소스를 정의합니다.GlobalBackgroundBrush
:MainWindow
의Background
속성에 이 리소스를 적용하여 창의 배경색을 설정합니다.
StaticResource와 DynamicResource의 차이
- StaticResource는 컴파일 타임에 리소스를 참조하여 성능이 더 좋지만, 런타임에 리소스 변경 사항을 반영하지 않습니다.
- DynamicResource는 런타임에 리소스를 참조하며, 리소스가 변경되면 UI가 자동으로 업데이트됩니다.
DynamicResource 예시
<Button Content="Dynamic Button" Background="{DynamicResource ButtonBackgroundBrush}" />
실행 결과
이 코드는 ButtonBackgroundBrush
가 변경되었을 때 버튼의 배경색이 자동으로 업데이트됩니다.
WPF의 Resources는 UI 요소의 스타일 및 속성을 일관성 있게 관리할 수 있도록 도와주는 강력한 도구입니다.