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