У меня есть приложение, которое позволяет пользователю изменять цветовые схемы на основе внешнего файла xaml. Когда пользователь нажимает на MenuItem, который содержит название темы, выполняется следующий код:
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);
}
}
Это работает для большинства приложений - меняются все мои ресурсные кисти - с одним исключением. У меня есть субконтроль, цвет фона которого определяется привязкой значения с помощью конвертера. Однако вместо того, чтобы жестко кодировать цвета в конвертере, конвертер использовал строковые константы для имен кистей, а затем возвращал цвет из App.Current.Resources:
Brush ret = Application.Current.Resources[brushToReturn] as Brush;
То, что здесь происходит, заключается в том, что Application.Current.Resources не содержит тот же набор ресурсов, что и окно. Я попытался загрузить тему в Application.Current.Resources и прочитать ее в конвертере, но, похоже, это тоже не работает. Кто-нибудь может сказать мне, что мне здесь не хватает? Есть ли способ изменить, скажем, Application.Current.Resources и повлиять ли он на открытые окна?
Спасибо!