2009-10-11 8 views
1

J'applique des "thèmes" à mon application WPF en effaçant tous les dictionnaires fusionnés (Resources.MergedDictionaries.Clear()) et les nouveaux en fonction du thème sélectionné. Au lieu d'effacer tous les dictionnaires, je voudrais effacer uniquement certains dictionnaires "liés à un thème", laissant d'autres encore chargés. Comment puis je faire ça? Je n'ai pas trouvé un moyen de différencier les dictionnaires quand je les ai itérés ...WPF - Effacement de certains dictionnaires de ressources uniquement

Merci pour votre aide!

Répondre

1

Je suppose que vous faites la fusion au niveau Application, sinon vous pourriez simplement introduire un contrôle intermédiaire dont le seul travail consiste à héberger les dictionnaires de thèmes. Cela étant le cas, je suggère d'utiliser une approche à plusieurs niveaux où les premières maisons dictionnaire fusionnées tous les dictionnaires liés thématiques:

<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> 

Maintenant, vous pouvez cibler uniquement les ressources liées à thème avec le code comme ceci:

Application.Current.Resources.MergedDictionaries[0].Clear(); 
Application.Current.Resources.MergedDictionaries[0].Add(...); 
+0

Très agréable. Merci beaucoup Kent !!! –

+0

Existe-t-il un moyen de donner un nom à un dictionnaire de ressources afin que vous puissiez le rechercher plutôt que de le coder en dur comme le premier? Ou est-ce considéré comme un couplage acceptable entre le code XAML et le code? –

Questions connexes