Как загрузить MergedResources во время выполнения? Мой код не работает, как задумано
У меня есть настольное WPF-приложение, которое загружает его ресурсы из Интернета, это позволяет нам делать разные вещи, такие как... добавление рождественской темы позже по дороге в праздничные дни, если мы захотим. Чтобы загрузить тему, я бы просто заменил словарь ресурсов текущего приложения на наш собственный словарь ресурсов.
ResourceDictionary resources = null;
System.Net.WebClient client = new System.Net.WebClient();
using (Stream s = client.OpenRead("http://www.mywebsite.com/MyXAMLFile.xaml"))
{
try
{
resources = (ResourceDictionary)XamlReader.Load(s);
}
catch
{ }
}
Application.Current.Resources = resources;
Ну, мы дошли до того, что я хотел разделить некоторые ресурсы на разные файлы вместо того, чтобы использовать ОДИН большой файл ресурсов, содержащий все. Я думал, что это будет довольно просто, просто используя объединенные ресурсы. Я думал, что простая модификация приведенного выше кода заставит его работать, но оказывается, что нет. Это то, что я ожидал, я должен был сделать.
//replace the last line
Application.Current.Resources = resources;
//with this line
Application.Current.Resources.MergedDictionaries.Add(resources);
Когда приложение запускается, оно просто использует обычные стили и не учитывает объединенные ресурсы, которые я добавил. Что я здесь не так делаю? Как я могу динамически добавлять объединенные ресурсы (и несколько) во время выполнения и заставить их работать должным образом?
Спасибо Кайл
1 ответ
Мои извинения, по-видимому, это работает. В предыдущем методе у меня были стили по умолчанию, определенные уже в App.xaml, и я использовал StaticResources, когда я перешел на использование объединенных словарей, мне пришлось использовать DynamicResources. Я думал, что уничтожил стили в App.xaml, но поскольку в моем решении Visual Studio было несколько проектов, я удалил стили в неправильном файле App.xaml!
Черт бы побрал Visual Studio за то, что невозможно сказать, какой файл App.xaml вы редактируете, если в одном решении несколько проектов:-).
Прости еще раз! Если бы я знал, как удалить вопрос, я бы.