» [WPF] Resources

[WPF] Resources

by DUBUKIMCH

WPF의 Resources(리소스)는 애플리케이션 내에서 재사용할 수 있는 오브젝트나 값을 정의하는 기능을 제공합니다. 리소스를 사용하면 스타일, 브러시, 데이터 템플릿 등 다양한 오브젝트를 중앙에서 관리하고, 중복을 줄이며 일관된 UI 디자인을 유지할 수 있습니다.

리소스는 특정 컨트롤, 창, 또는 애플리케이션 전역에서 사용할 수 있도록 선언될 수 있습니다. WPF 리소스는 StaticResource 또는 DynamicResource 마크업 확장을 통해 참조됩니다.

리소스의 종류

  1. StaticResource: 리소스가 처음 로드될 때 정적으로 참조됩니다. 리소스가 변경될 경우 UI는 자동으로 업데이트되지 않습니다.
  2. 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: MainWindowBackground 속성에 이 리소스를 적용하여 창의 배경색을 설정합니다.

StaticResource와 DynamicResource의 차이

  • StaticResource는 컴파일 타임에 리소스를 참조하여 성능이 더 좋지만, 런타임에 리소스 변경 사항을 반영하지 않습니다.
  • DynamicResource는 런타임에 리소스를 참조하며, 리소스가 변경되면 UI가 자동으로 업데이트됩니다.

DynamicResource 예시

<Button Content="Dynamic Button" Background="{DynamicResource ButtonBackgroundBrush}" />

실행 결과

이 코드는 ButtonBackgroundBrush가 변경되었을 때 버튼의 배경색이 자동으로 업데이트됩니다.

WPF의 Resources는 UI 요소의 스타일 및 속성을 일관성 있게 관리할 수 있도록 도와주는 강력한 도구입니다.

You may also like

Leave a Comment

error: Content is protected !!