public static void SetTheme(this ResourceDictionary resourceDictionary, ITheme theme) { if (resourceDictionary == null) { throw new ArgumentNullException(nameof(resourceDictionary)); } SetDataTemplate(resourceDictionary, "EarthDataTemplate", theme.EarthDataTemplate); ITheme oldTheme = resourceDictionary.GetTheme(); resourceDictionary[CurrentThemeKey] = theme; }
/// <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); }
private static void AssertThemeColorsReadFromXaml(IBaseTheme baseTheme, string xaml) { var resourceDictionary = new ResourceDictionary(); resourceDictionary.MergedDictionaries.Add(MdixHelper.GetResourceDictionary(xaml)); resourceDictionary.MergedDictionaries.Add(MdixHelper.GetPrimaryColorResourceDictionary("DeepPurple")); resourceDictionary.MergedDictionaries.Add(MdixHelper.GetSecondaryColorResourceDictionary("Lime")); ITheme theme = resourceDictionary.GetTheme(); foreach (var property in theme.GetType().GetProperties().Where(p => p.PropertyType == typeof(Color))) { var propertyColor = (Color)property.GetValue(theme) !; var(nameBrush, nameColor) = property.Name == "ValidationError" ? ("MaterialDesignValidationErrorBrush", "MaterialDesignValidationErrorColor") : ("MaterialDesign" + property.Name, "MaterialDesign" + property.Name + "Color"); var xamlColor = ((SolidColorBrush)resourceDictionary[nameBrush]).Color; Assert.Equal(xamlColor, propertyColor); } }
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); }