본문 바로가기
Languages/C#

C# WPF 병합된 리소스(Merged Resource)

by 반도체는 프로그래밍을 좋아해 2023. 4. 10.
728x90

WPF에서 병합 리소스(Merged Resource)는 여러 리소스 사이에서 공유되어 사용될 수 있는 리소스를 정의하는 방법입니다. 

예를 들어, 여러 개의 컨트롤에서 같은 스타일을 사용하는 경우, 해당 스타일을 하나의 리소스로 정의하고, 병합 리소스를 사용하여 컨트롤에서 참조할 수 있습니다.

병합 리소스는 일반적으로 Application, Window, UserControl 등의 전역 범위에서 사용되며, 다음과 같은 형식으로 정의됩니다.

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
            <!-- 스타일 내용 -->
        </Style>
    </ResourceDictionary>
</Application.Resources>

 

위 예제에서 MyButtonStyle이라는 스타일은 Application 리소스에 정의되어 있습니다. 이제 다른 컨트롤에서 이 스타일을 참조하기 위해서는 병합 리소스를 사용하여 정의합니다.

<Button Style="{StaticResource MyButtonStyle}" Content="Click me" />

위 예제에서는 Button 컨트롤의 Style 속성을 병합 리소스로 설정하여 MyButtonStyle 스타일을 참조합니다.

또한, 다른 리소스 사이에서도 병합 리소스를 사용할 수 있습니다. 

예를 들어, 다른 리소스 딕셔너리에서 이미 정의된 리소스를 참조하려면, 다음과 같은 형식으로 병합 리소스를 사용합니다.

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MyResources.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

위 예제에서는 MyResources.xaml 파일에서 정의된 리소스를 현재 리소스 딕셔너리에 병합합니다. 이제 현재 리소스 딕셔너리에서는 MyResources.xaml에 정의된 리소스를 사용할 수 있습니다.

이와 같이 병합 리소스를 사용하면, 리소스를 중복해서 정의하지 않아도 되므로 코드의 가독성과 유지보수성이 높아집니다.

더 자세하게 설명하면,

"MyResources.xaml" 파일에서 정의된 리소스를 현재 리소스 딕셔너리에 병합한다는 것은 "MyResources.xaml" 파일에 정의된 리소스를 현재 애플리케이션의 전체 리소스 딕셔너리에 추가한다는 의미입니다. 이렇게 하면 애플리케이션 전체에서 해당 리소스를 사용할 수 있습니다.

만약 "MyResources.xaml" 파일에 한 개 이상의 리소스가 정의되어 있다면, 각각의 리소스가 현재 리소스 딕셔너리에 추가됩니다. 즉, "MyResources.xaml" 파일의 모든 리소스가 병합됩니다. 이때, 같은 키를 가진 리소스가 있을 경우, 가장 마지막에 병합된 리소스가 우선순위를 가집니다. 따라서, 리소스의 키는 중복되지 않도록 유의해야 합니다.

728x90