Я предполагаю, что вы выполняете объединение на уровне 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(...);