public void ChangeRibbonTheme(string ThemeName, bool IsMetro = false) {
Dispatcher.BeginInvoke(IsMetro ? DispatcherPriority.ApplicationIdle : DispatcherPriority.Render, (ThreadStart)(() => {
var owner = Window.GetWindow(this);
Application.Current.Resources.BeginInit();
Application.Current.Resources.MergedDictionaries.RemoveAt(1);
if (IsMetro)
Application.Current.Resources.MergedDictionaries.Insert(1, new ResourceDictionary() { Source = new Uri("pack://application:,,,/Fluent;component/Themes/Office2013/Generic.xaml") });
else
Application.Current.Resources.MergedDictionaries.Insert(1, new ResourceDictionary() { Source = new Uri($"pack://application:,,,/Fluent;component/Themes/Office2010/{ThemeName}.xaml") });
Application.Current.Resources.EndInit();
if (owner is RibbonWindow) {
owner.Style = null;
owner.Style = owner.FindResource("RibbonWindowStyle") as Style;
owner.Style = null;
// Resize Window to work around alignment issues caused by theme change
++owner.Width;
--owner.Width;
}
Utilities.SetRegistryValue("CurrentTheme", ThemeName);
}));
}