protected override void SetTheme(ITheme theme, ResourceDictionary resourceDictionary) { base.SetTheme(theme, resourceDictionary); resourceDictionary.SetMahApps(theme, BaseTheme); IThemeManager themeManager = resourceDictionary.GetThemeManager(); if (themeManager != null) { themeManager.ThemeChanged += ThemeManagerOnThemeChanged; } }
/// <summary> /// Writes the specified theme into the resource dictionary. /// The implementation is based on MaterialDesignThemes.Wpf.ResourceDictionaryExtensions.SetTheme(this ResourceDictionary resourceDictionary, ITheme theme). /// </summary> /// <param name="resourceDictionary"></param> /// <param name="theme"></param> public static void SetExtendedTheme(this ResourceDictionary resourceDictionary, IExtendedTheme theme) { if (resourceDictionary == null) { throw new ArgumentNullException(nameof(resourceDictionary)); } SetSolidColorBrush(resourceDictionary, "PrimaryHueLightBrush", theme.PrimaryLight.Color); SetSolidColorBrush(resourceDictionary, "PrimaryHueLightForegroundBrush", theme.PrimaryLight.ForegroundColor ?? theme.PrimaryLight.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "PrimaryHueMidBrush", theme.PrimaryMid.Color); SetSolidColorBrush(resourceDictionary, "PrimaryHueMidForegroundBrush", theme.PrimaryMid.ForegroundColor ?? theme.PrimaryMid.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "PrimaryHueDarkBrush", theme.PrimaryDark.Color); SetSolidColorBrush(resourceDictionary, "PrimaryHueDarkForegroundBrush", theme.PrimaryDark.ForegroundColor ?? theme.PrimaryDark.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "SecondaryHueLightBrush", theme.SecondaryLight.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueLightForegroundBrush", theme.SecondaryLight.ForegroundColor ?? theme.SecondaryLight.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "SecondaryHueMidBrush", theme.SecondaryMid.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueMidForegroundBrush", theme.SecondaryMid.ForegroundColor ?? theme.SecondaryMid.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "SecondaryHueDarkBrush", theme.SecondaryDark.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueDarkForegroundBrush", theme.SecondaryDark.ForegroundColor ?? theme.SecondaryDark.Color.ContrastingForegroundColor()); // these are here for backwards compatibility, and will be removed in a future version. SetSolidColorBrush(resourceDictionary, "SecondaryHueMidBrush", theme.SecondaryMid.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueMidForegroundBrush", theme.SecondaryMid.ForegroundColor ?? theme.SecondaryMid.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "ValidationErrorBrush", theme.ValidationError); resourceDictionary["MaterialDesignValidationErrorColor"] = theme.ValidationError; GetColorProperties(theme.GetType(), true, false) .ForEach(property => SetSolidColorBrush(resourceDictionary, GetKey(property), (Color)property.GetValue(theme))); if (!(resourceDictionary.GetThemeManager() is ThemeManager themeManager)) { resourceDictionary[ThemeManagerKey] = themeManager = new ThemeManager(resourceDictionary); } ITheme oldTheme = resourceDictionary.GetTheme(); resourceDictionary[CurrentThemeKey] = theme; themeManager.OnThemeChange(oldTheme, theme); }
public static void SetTheme(this ResourceDictionary resourceDictionary, ITheme theme) { if (resourceDictionary == null) { throw new ArgumentNullException(nameof(resourceDictionary)); } SetSolidColorBrush(resourceDictionary, "PrimaryHueLightBrush", theme.PrimaryLight.Color); SetSolidColorBrush(resourceDictionary, "PrimaryHueLightForegroundBrush", theme.PrimaryLight.ForegroundColor ?? theme.PrimaryLight.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "PrimaryHueMidBrush", theme.PrimaryMid.Color); SetSolidColorBrush(resourceDictionary, "PrimaryHueMidForegroundBrush", theme.PrimaryMid.ForegroundColor ?? theme.PrimaryMid.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "PrimaryHueDarkBrush", theme.PrimaryDark.Color); SetSolidColorBrush(resourceDictionary, "PrimaryHueDarkForegroundBrush", theme.PrimaryDark.ForegroundColor ?? theme.PrimaryDark.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "SecondaryHueLightBrush", theme.SecondaryLight.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueLightForegroundBrush", theme.SecondaryLight.ForegroundColor ?? theme.SecondaryLight.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "SecondaryHueMidBrush", theme.SecondaryMid.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueMidForegroundBrush", theme.SecondaryMid.ForegroundColor ?? theme.SecondaryMid.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "SecondaryHueDarkBrush", theme.SecondaryDark.Color); SetSolidColorBrush(resourceDictionary, "SecondaryHueDarkForegroundBrush", theme.SecondaryDark.ForegroundColor ?? theme.SecondaryDark.Color.ContrastingForegroundColor()); //NB: These are here for backwards compatibility, and will be removed in a future version. SetSolidColorBrush(resourceDictionary, "SecondaryAccentBrush", theme.SecondaryMid.Color); SetSolidColorBrush(resourceDictionary, "SecondaryAccentForegroundBrush", theme.SecondaryMid.ForegroundColor ?? theme.SecondaryMid.Color.ContrastingForegroundColor()); SetSolidColorBrush(resourceDictionary, "ValidationErrorBrush", theme.ValidationError); resourceDictionary["ValidationErrorColor"] = theme.ValidationError; SetSolidColorBrush(resourceDictionary, "MaterialDesignBackground", theme.Background); SetSolidColorBrush(resourceDictionary, "MaterialDesignPaper", theme.Paper); SetSolidColorBrush(resourceDictionary, "MaterialDesignCardBackground", theme.CardBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignToolBarBackground", theme.ToolBarBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignBody", theme.Body); SetSolidColorBrush(resourceDictionary, "MaterialDesignBodyLight", theme.BodyLight); SetSolidColorBrush(resourceDictionary, "MaterialDesignColumnHeader", theme.ColumnHeader); SetSolidColorBrush(resourceDictionary, "MaterialDesignCheckBoxOff", theme.CheckBoxOff); SetSolidColorBrush(resourceDictionary, "MaterialDesignCheckBoxDisabled", theme.CheckBoxDisabled); SetSolidColorBrush(resourceDictionary, "MaterialDesignTextBoxBorder", theme.TextBoxBorder); SetSolidColorBrush(resourceDictionary, "MaterialDesignDivider", theme.Divider); SetSolidColorBrush(resourceDictionary, "MaterialDesignSelection", theme.Selection); SetSolidColorBrush(resourceDictionary, "MaterialDesignFlatButtonClick", theme.FlatButtonClick); SetSolidColorBrush(resourceDictionary, "MaterialDesignFlatButtonRipple", theme.FlatButtonRipple); SetSolidColorBrush(resourceDictionary, "MaterialDesignToolTipBackground", theme.ToolTipBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignChipBackground", theme.ChipBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignSnackbarBackground", theme.SnackbarBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignSnackbarMouseOver", theme.SnackbarMouseOver); SetSolidColorBrush(resourceDictionary, "MaterialDesignSnackbarRipple", theme.SnackbarRipple); SetSolidColorBrush(resourceDictionary, "MaterialDesignTextFieldBoxBackground", theme.TextFieldBoxBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignTextFieldBoxHoverBackground", theme.TextFieldBoxHoverBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignTextFieldBoxDisabledBackground", theme.TextFieldBoxDisabledBackground); SetSolidColorBrush(resourceDictionary, "MaterialDesignTextAreaBorder", theme.TextAreaBorder); SetSolidColorBrush(resourceDictionary, "MaterialDesignTextAreaInactiveBorder", theme.TextAreaInactiveBorder); if (!(resourceDictionary.GetThemeManager() is ThemeManager themeManager)) { resourceDictionary[ThemeManagerKey] = themeManager = new ThemeManager(resourceDictionary); } ITheme oldTheme = resourceDictionary.GetTheme(); resourceDictionary[CurrentThemeKey] = theme; themeManager.OnThemeChange(oldTheme, theme); }