Я предполагаю, что вы выполняете слияние на уровне 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(...);
Очень приятно. Большое спасибо Кенту !!! –
Есть ли способ дать ресурсовому словарю имя, чтобы вы могли его искать, а не жесткий код как первый? Или это считается приемлемой связью между XAML и кодом? –