Почему мой словарь ресурсов не обновляет внешний вид? Действительно надоело - PullRequest
2 голосов
/ 08 мая 2011

У меня есть 2 ресурса Словари ресурсов / Orange / Core.xaml и Активы / Gray / Core.xaml.Я хочу загрузить их динамически.Словарь содержит как неявные, так и явные стили.Я попробовал стандартный код для изменения словаря ресурсов.Код: -

 Uri uri = new Uri("/FMT.Client;component/Assets/Orange/Core.xaml", UriKind.Relative);
            StreamResourceInfo info = Application.GetResourceStream(uri);

            if (info != null)
            {
                StreamReader reader = new StreamReader(info.Stream);
                ResourceDictionary currentDict = XamlReader.Load(reader.ReadToEnd()) as ResourceDictionary;
                reader.Close();
                if (currentDict != null)
                {
                    Application.Current.Resources.MergedDictionaries.RemoveAt(Application.Current.Resources.MergedDictionaries.Count - 1);
                    Application.Current.Resources.MergedDictionaries.Add(currentDict);

                }
            }

Я не знаю, почему моя тема не меняется.Я действительно сыт по горло и чувствую, что бьюсь головой об стену.Сначала я поместил этот код на конкретной странице.Но это не сработало, как ожидалось.Затем я прочитал в какой-то ветке, что это еще одно ограничение SL4, и нам нужно поместить код перед загрузкой страницы.Читая это, я поместил этот код в App.xaml.cs в конструкторе сразу после строки InitializeComponent (), и все же он не работает.Что еще я могу сделать?Я провел почти 3 часа за этой глупой бесполезной проблемой.Теперь я не могу этого вынести.Строка Application.Current.Resources.MergedDictionaries.Add(currentDict); выполняется, но никаких изменений в теме не видно.

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

Похоже, вам может понадобиться сначала очистить ResourceDictionary, но я не уверен.Тем не менее, я нашел сайт, который смоделировал, как это сделать.Дайте мне знать, если это работает:

http://silverlightips.net/tag/runtime-resourcedictionary/

1 голос
/ 08 мая 2011

Исходный код может правильно очищать объединенные словари - при условии, что объединен только 1 словарь. Я не могу сказать из фрагмента кода.

BiggsTRC предоставил вам отличный пример.

Я полагаю, что часть головоломки, которую вам не хватает, заключается в том, что вам нужно сбросить все свои статические ресурсы. Удаление старого объединенного словаря и добавление нового не приводит к обновлению объявлений StaticResource. Обратите внимание на пример метода ResetStyles. Вам, вероятно, нужно что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...