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(...);
Très agréable. Merci beaucoup Kent !!! –
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? –