2009-10-11 2 views
1

Я применяю «темы» к своему приложению WPF, очищая все объединенные словари (Resources.MergedDictionaries.Clear()) и новые, основанные на выбранной теме.
Вместо того чтобы очищать все словари, я хотел бы очистить только определенные «тематические» словари, оставив остальных загруженными. Как я могу это сделать? Я не нашел способ отличить словари при повторении, хотя они ...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

Очень приятно. Большое спасибо Кенту !!! –

+0

Есть ли способ дать ресурсовому словарю имя, чтобы вы могли его искать, а не жесткий код как первый? Или это считается приемлемой связью между XAML и кодом? –

Смежные вопросы