티스토리 뷰
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로 정의된 리소스가 사용된다.