1
我通过清除所有合并字典(Resources.MergedDictionaries.Clear())和基于所选主题的新字典来将“主题”应用于我的WPF应用程序。
与其清除所有字典,我只想清除某些“与主题相关”的字典,使其他字典仍然加载。我怎样才能做到这一点?我没有找到一种方式来区分字典时,虽然迭代他们...WPF - 只清除某些资源字典
感谢您的帮助!
我通过清除所有合并字典(Resources.MergedDictionaries.Clear())和基于所选主题的新字典来将“主题”应用于我的WPF应用程序。
与其清除所有字典,我只想清除某些“与主题相关”的字典,使其他字典仍然加载。我怎样才能做到这一点?我没有找到一种方式来区分字典时,虽然迭代他们...WPF - 只清除某些资源字典
感谢您的帮助!
我假设你在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(...);
非常好。非常感谢肯特! – 2009-10-11 15:38:34
有没有办法给一个资源字典一个名字,以便您可以搜索它,而不是将其作为第一个进行硬编码?或者这被认为是XAML和代码之间可接受的耦合? – 2009-10-11 22:31:13