Я использую решение, подобное предоставленному kmatyaszek, за исключением того, что я делаю это в ComboBox:
private void StyleCombo_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedTheme = StyleCombo.SelectedItem as ThemeNames;
Application.Current.Resources.MergedDictionaries.Clear();
// XAML
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/System.Windows.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.Input.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.Navigation.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.Data.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.DataVisualization.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.Docking.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.GridView.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.Pivot.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.PivotFieldList.xaml", UriKind.RelativeOrAbsolute)
});
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/Telerik.Windows.Themes." + selectedTheme.Value + ";component/Themes/Telerik.Windows.Controls.VirtualGrid.xaml", UriKind.RelativeOrAbsolute)
});
}
Вы сказали в разделе комментариев, что некоторые контроллеры не меняются динамически - это известная проблема для библиотек NoXaml. То, что я могу порекомендовать вам, это установить параметры вручную для этих контроллеров. В моем случае это выглядит так:
// Main Grid
if (selectedTheme.Name == "Visual Studio 2013 Dark")
{
VisualStudio2013Palette.LoadPreset(VisualStudio2013Palette.ColorVariation.Dark);
App.StronaGlowna.MainGrid.Background = (SolidColorBrush)new BrushConverter().ConvertFrom("#FF1E1E1E");
}
if (selectedTheme.Name == "Visual Studio 2013 Blue")
{
VisualStudio2013Palette.LoadPreset(VisualStudio2013Palette.ColorVariation.Blue);
}
if (selectedTheme.Name == "Visual Studio 2013")
{
VisualStudio2013Palette.LoadPreset(VisualStudio2013Palette.ColorVariation.Light);
App.StronaGlowna.MainGrid.Background = Brushes.White;
}
if (selectedTheme.Name == "Dark")
{
VisualStudio2013Palette.LoadPreset(VisualStudio2013Palette.ColorVariation.Dark);
App.StronaGlowna.MainGrid.Background = (SolidColorBrush)new BrushConverter().ConvertFrom("#FF3D3D3D");
}
if (selectedTheme.Name == "Green")
{
GreenPalette.LoadPreset(GreenPalette.ColorVariation.Dark);
App.StronaGlowna.MainGrid.Background = (SolidColorBrush)new BrushConverter().ConvertFrom("#FF1D1E21");
}
if (selectedTheme.Name == "Green Light")
{
GreenPalette.LoadPreset(GreenPalette.ColorVariation.Light);
App.StronaGlowna.MainGrid.Background = (SolidColorBrush)new BrushConverter().ConvertFrom("#FFE0E0E0");
}
if (selectedTheme.Name == "Vista" ||
selectedTheme.Name == "Visual Studio 2013 Blue" || selectedTheme.Name == "Office Black" ||
selectedTheme.Name == "Office Blue" ||
selectedTheme.Name == "Office Silver" || selectedTheme.Name == "Summer" ||
selectedTheme.Name == "Transparent" || selectedTheme.Name == "Windows 7")
{
App.StronaGlowna.MainGrid.Background = Brushes.White;
}
Это решение было предоставлено мне службой поддержки Telerik в 1 заявке в службу поддержки. Вы можете найти большинство шестнадцатеричных цветов элементов управления в документации, например , это для темы Office2013 . Кроме того, имейте в виду, что некоторые контроллеры WPF не подвержены влиянию стилей (я думаю, что одним из примеров является TextBox), поэтому, если вы используете ванильные контроллеры WPF, они могут остаться неизменными и потребовать от вас жесткого кодирования новых цветов.