Как реализовать тематику в wpf

Я хочу реализовать тему типа ASP.Net в WPF. Пользователь имеет выбор различных предустановленных тем и может переключиться на другую тему.

Чтобы реализовать это, я попытался создать разные словари ресурсов для каждой темы и сохранить требуемый стиль с помощью ключа. Набор ключей одинаков во всех темах, но его определение в каждой разное.

Я использую приведенный ниже код для переключения темы при нажатии:

var theme = Application.LoadComponent(uri) as ResourceDictionary;
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(theme);

На всех страницах / usercontrol / windows я установил StaticResource и применил соответствующий ключ. Когда я переключаюсь на другую тему, она применяется только после следующего события в пользовательском интерфейсе.

Если я устанавливаю для изменения StaticResource значение DynamicResource, оно применяется немедленно.

Поделитесь, пожалуйста, своей идеей добиться этого с помощью StaticResource?


person Naresh Goradara    schedule 22.06.2012    source источник


Ответы (2)


посмотри на вопрос

WPF и MVVM - динамическое изменение тем

вы можете скачать предопределенные темы по ссылке ниже

http://wpf.codeplex.com/wikipage?title=WPF%20Themes

person JSJ    schedule 22.06.2012
comment
Спасибо за ответ, но он не работает со StaticResource. - person Naresh Goradara; 22.06.2012

К сожалению, вы не можете добиться этого с помощью StaticResource. Элемент управления со StaticResource необходимо перезагрузить после переключения на другую тему, чтобы применить новый ресурс.

Возможно, вы захотите создать функцию для перезагрузки текущей страницы после изменения темы.

person Michael_S_    schedule 30.09.2017