2009-10-11 121 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

非常好。非常感謝肯特! – 2009-10-11 15:38:34

+0

有沒有辦法給一個資源字典一個名字,以便您可以搜索它,而不是將其作爲第一個進行硬編碼?或者這被認爲是XAML和代碼之間可接受的耦合? – 2009-10-11 22:31:13