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