Я хочу динамически менять пользовательскую тему для всего приложения. Темы представлены в виде словарей ресурсов с именами ExpressionDark.xaml и ExpressionLight.xaml (загружаются из Codeplex). Я использую поле со списком, чтобы выбрать подходящую тему. Смена темы происходит в событии SelectionChanged. Вот код:
private void themesComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ResourceDictionary resourceDictionary = new ResourceDictionary();
int theme = ((ComboBox)sender).SelectedIndex;
switch (theme)
{
case (int)Themes.Dark:
resourceDictionary = Application.LoadComponent(
new Uri(@"Themes\ExpressionDark.xaml",
UriKind.Relative)) as ResourceDictionary;
break;
case (int)Themes.Light:
resourceDictionary = Application.LoadComponent(
new Uri(@"Themes\ExpressionLight.xaml",
UriKind.Relative)) as ResourceDictionary;
break;
default:
break;
}
Application.Current.Resources = resourceDictionary;
}
Это прекрасно работает для текущего окна, но когда я запускаю экземпляр другого окна приложения, возникает исключение XamlParseException.