티스토리 뷰

IT/C#

[xaml][WPF] 리소스 딕셔너리 (ResourceDictionary)

주인장 진빼이

Resource Dictionary, 한국말로 번역하면 리소스 사전이다.

리소스 딕셔너리? 리소스 사전? 무엇이 정확한 표현인지는 모르겠다.

그냥 리소스 딕셔너리라고 부르겠다.

 

프로젝트를 진행할 때 리소스 사전, 소스코드, window xaml 파일 등으로 분리하여 유지보수를 용이하게할 필요가 있다.

이때 리소스 딕셔너리를 사용하여 정의된 리소스, 사용 중인 리소스들을 딕셔너리에 담아 파일별로 나누어 세분화 시켜 정리할 수 있다.

여러 개의 리소스 딕셔너리들을 메인 리소스 영역에 연결시키는는데 이를 리소스 병합(Resource.MergedDictictionaries)이라 표현한다.

 

리소스 딕셔너리는 여러개의 정의된 리소스를 포함할 수 있고 또 다른 리소스 딕셔너리 파일을 추가(import)할 수 있다.

정의된 리소스 사용 및 리소스 딕셔너리 파일 import는 이전에 정의되지 않은 리소스를 사용하다간 오류가 발생할 수 있다.

반드시 정의된 리소스를 한해서 사용해야 한다. (오류도 잘 뜨지 않는다)

 

추가한 리소스 딕셔너리를 사용하기 위해서는 App.xaml 파일인 메인 리소스 영역에 리소스 딕셔너리를 추가해야 한다.

다음 코드는 메인 리소스 영역에 추가한 리소스 딕셔너리(dict1.xaml)를 추가한 것이다.

<!-- App.xaml -->
<Application.Resources>
	<ResourceDictionary>
		<ResourceDictionary.MergedDictionaries>
			<ResourceDictionary Source="Style/dict1.xaml"/>
		</ResourceDictionary.MergedDictionaries>
	</ResourceDictionary>
</Application.Resources>

 

그리고 다시 dict1.xaml에 여러 개의 리소스 딕셔너리를 통해 세분화하려면 동일한 코드를 삽입한다. (단, Source 값은 다르다)

리소스 딕셔너리를 추가할 땐, ResourceDictionary.MergedDictionaries 영역 내 Source 값을 반드시 지정해야 한다.

<!-- dict1.xaml -->
<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary1.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
      <ResourceDictionary Source="myresourcedictionary3.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<!-- myresourcedictionary1.xaml -->
<Style x:Key="..." TargetType="{x:Type ...}">
	<Setter Property="...">
</Style>

 

리소스 딕셔너리 파일에 정의한 리소스를 사용하려면 반드시 App.xaml 리소스 영역에 연결시켜야 한다.

 

리소스를 사용할 땐 x:Key 값으로 리소스의 이름을 등록하게 되는데 dict1.xaml에서 "fonts1" 이란 Key 값으로 리소스를 정의하고

또 다시 dict2.xaml에서 "fonts1" 이란 동일한 Key 값을 정의한 경우

MergedDictionaries 영역에 가장 마지막에 import된 dict2.xaml에 fonts1로 정의된 리소스가 사용된다.

 

 
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함