2009-10-11 4 views
1

모든 병합 된 사전 (Resources.MergedDictionaries.Clear())을 지우고 선택한 테마를 기반으로 새 WPF 응용 프로그램에 "테마"를 적용하고 있습니다.
모든 사전을 지우는 대신 특정 "테마 관련"사전 만 지우고 다른 단어는 계속로드하고 싶습니다. 어떻게해야합니까? 사전을 차별화 할 수있는 방법을 찾지 못했습니다 ...WPF - 특정 리소스 사전 만 지우기

당신의 도움에 감사드립니다!

답변

1

나는 당신이 Application 레벨에서 병합을한다고 가정하고있다. 그렇지 않으면 단지 테마 사전을 호스트하는 유일한 직업 인 중간 컨트롤을 도입 할 수있다. 그되는 경우, 나는 다중 계층 접근 방식을 사용하여 제안함으로써 최초의 통합 사전 주택 모든 테마 관련 사전 :

<Application.Resources> 
    <!-- all application level resources --> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <!-- theme-related resources --> 
      <ResourceDictionary> 
       <ResourceDictionary.MergedDictionaries> 
        <!-- merge in theme-related dictionaries here --> 
       </ResourceDictionary.MergedDictionaries> 
      </ResourceDictionary> 

      <!-- merge in other application-level dictionaries here --> 
     </ResourceDictionary.MergedDictionaries> 

     <!-- other resources --> 
     <SolidColorBrush x:Key="Foo">Black</SolidColorBrush> 
    </ResourceDictionary> 
</Application.Resources> 

지금이 같은 코드 만 테마 관련 자료를 타겟팅 할 수 있습니다 :

Application.Current.Resources.MergedDictionaries[0].Clear(); 
Application.Current.Resources.MergedDictionaries[0].Add(...); 
+0

아주 좋습니다. 고마워요 켄트 !!! –

+0

리소스 딕셔너리에 이름을 붙여서 처음으로 하드 코딩하지 않고 검색 할 수있는 방법이 있습니까? 또는 XAML과 코드간에 허용되는 연결로 간주됩니까? –