J'ai une application qui permet à l'utilisateur de changer les schémas de couleurs basés sur un fichier xaml externe. Lorsque l'utilisateur clique sur un MenuItem qui contient le nom d'un thème, le code suivant exécute:Comment puis-je obtenir une modification des ressources à propager dans toute l'application, y compris dans ValueConverters?
MenuItem mi = sender as MenuItem;
string executingDirectory = Assembly.GetExecutingAssembly().Location.Substring(0, Assembly.GetExecutingAssembly().Location.LastIndexOf("\\"));
string path = System.IO.Path.Combine(executingDirectory + "\\Themes", mi.Header.ToString() + ".xaml");
if (File.Exists(path))
{
using (FileStream fs = new FileStream(path, FileMode.Open))
{
ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs);
Resources.MergedDictionaries.Clear();
Resources.MergedDictionaries.Add(dic);
}
}
Cela fonctionne pour la plupart de l'application - tous mes pinceaux de ressources sur le changement - à une exception près. J'ai un sous-contrôle dont la couleur de fond est déterminée par une liaison de valeur à l'aide d'un convertisseur. Plutôt que de coder en dur les couleurs dans le convertisseur, cependant, j'ai eu les constantes de chaîne d'utilisation du convertisseur pour les noms de brosse, puis retourner la couleur de App.Current.Resources:
Brush ret = Application.Current.Resources[brushToReturn] as Brush;
Ce qui semble se passer ici est que Application.Current.Resources ne contient pas le même ensemble de ressources que la fenêtre. J'ai essayé de charger le thème dans Application.Current.Resources et de le lire dans le convertisseur, mais cela ne semble pas fonctionner non plus. Quelqu'un peut-il me dire ce que je manque ici? Existe-t-il un moyen de modifier, par exemple, Application.Current.Resources et de l'affecter aux fenêtres ouvertes?
Merci!