Ich habe eine Anwendung, die es dem Benutzer ermöglicht, Farbschemata basierend auf einer externen XAML-Datei zu ändern. Wenn der Benutzer auf einem MenuItem klickt, der den Namen eines Themas enthält, führt der folgende Code:Wie kann ich eine Änderung der Ressourcen vornehmen, um sie in der gesamten Anwendung zu implementieren, einschließlich in 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);
}
}
Dies funktioniert für die meisten der Anwendung - alle meine Ressourcen Bürsten ändern - mit einer Ausnahme. Ich habe eine Untersteuerung, deren Hintergrundfarbe durch eine Wertbindung mit einem Konverter bestimmt wird. Anstatt hart Code die Farben in den Konverter, obwohl, hatte ich die Converters String-Konstanten für Pinsel Namen und dann die Farbe aus App.Current.Resources zurück:
Brush ret = Application.Current.Resources[brushToReturn] as Brush;
Was hier zu sein scheint passiert ist, dass Application.Current.Resources enthält nicht die gleichen Ressourcen wie das Fenster. Ich habe versucht, das Thema in Application.Current.Resources zu laden und davon im Konverter zu lesen, aber das scheint auch nicht zu funktionieren. Kann mir jemand sagen, was ich hier vermisse? Gibt es eine Möglichkeit, beispielsweise Application.Current.Resources zu ändern und die geöffneten Fenster zu beeinflussen?
Danke!