public virtual LibraryTheme GenerateRuntimeLibraryTheme(LibraryThemeProvider libraryThemeProvider, Dictionary <string, string> values, RuntimeThemeColorValues runtimeThemeColorValues, string themeTemplateContent, string themeName, string themeDisplayName, ThemeGenerator.ThemeGeneratorBaseColorScheme baseColorScheme, ThemeGenerator.ThemeGeneratorColorScheme colorScheme, ThemeGenerator.ThemeGeneratorParameters generatorParameters)
        {
            values.Add("ThemeGenerator.Colors.PrimaryAccentColor", runtimeThemeColorValues.PrimaryAccentColor.ToString());
            values.Add("ThemeGenerator.Colors.AccentBaseColor", runtimeThemeColorValues.AccentBaseColor.ToString());
            values.Add("ThemeGenerator.Colors.AccentColor80", runtimeThemeColorValues.AccentColor80.ToString());
            values.Add("ThemeGenerator.Colors.AccentColor60", runtimeThemeColorValues.AccentColor60.ToString());
            values.Add("ThemeGenerator.Colors.AccentColor40", runtimeThemeColorValues.AccentColor40.ToString());
            values.Add("ThemeGenerator.Colors.AccentColor20", runtimeThemeColorValues.AccentColor20.ToString());

            values.Add("ThemeGenerator.Colors.HighlightColor", runtimeThemeColorValues.HighlightColor.ToString());
            values.Add("ThemeGenerator.Colors.IdealForegroundColor", runtimeThemeColorValues.IdealForegroundColor.ToString());

            libraryThemeProvider.FillColorSchemeValues(values, runtimeThemeColorValues);

            var xamlContent = ThemeGenerator.Current.GenerateColorSchemeFileContent(themeTemplateContent !, themeName, themeDisplayName, baseColorScheme.Name, colorScheme.Name, colorScheme.Name, runtimeThemeColorValues.Options.IsHighContrast, colorScheme.Values, baseColorScheme.Values, generatorParameters.DefaultValues);

            var preparedXamlContent = libraryThemeProvider.PrepareXamlContent(this, xamlContent, runtimeThemeColorValues);

            var resourceDictionary = (ResourceDictionary)XamlReader.Parse(preparedXamlContent);

            resourceDictionary.Add(Theme.ThemeIsRuntimeGeneratedKey, true);
            resourceDictionary[Theme.ThemeIsHighContrastKey]            = runtimeThemeColorValues.Options.IsHighContrast;
            resourceDictionary[LibraryTheme.RuntimeThemeColorValuesKey] = runtimeThemeColorValues;

            libraryThemeProvider.PrepareRuntimeThemeResourceDictionary(this, resourceDictionary, runtimeThemeColorValues);

            var runtimeLibraryTheme = libraryThemeProvider.CreateRuntimeLibraryTheme(resourceDictionary, runtimeThemeColorValues);

            return(runtimeLibraryTheme);
        }
Exemplo n.º 2
0
        public void RegisterLibraryThemeProvider(LibraryThemeProvider libraryThemeProvider)
        {
            if (libraryThemeProvider is null)
            {
                throw new ArgumentNullException(nameof(libraryThemeProvider));
            }

            if (this.libraryThemeProvidersInternal.Any(x => x.GetType() == libraryThemeProvider.GetType()))
            {
                return;
            }

            this.libraryThemeProvidersInternal.Add(libraryThemeProvider);

            try
            {
                this.isEnsuringThemesOrRegisteringProvider = true;

                foreach (var libraryTheme in libraryThemeProvider.GetLibraryThemes())
                {
                    this.AddLibraryTheme(libraryTheme);
                }
            }
            finally
            {
                this.isEnsuringThemesOrRegisteringProvider = false;
            }
        }
        public virtual LibraryTheme?GenerateRuntimeLibraryTheme(string baseColor, Color accentColor, bool isHighContrast, LibraryThemeProvider libraryThemeProvider)
        {
            var themeGeneratorParametersContent = libraryThemeProvider.GetThemeGeneratorParametersContent();

            if (string.IsNullOrEmpty(themeGeneratorParametersContent))
            {
                return(null);
            }

            var themeTemplateContent = libraryThemeProvider.GetThemeTemplateContent();

            if (string.IsNullOrEmpty(themeTemplateContent))
            {
                return(null);
            }

            var generatorParameters = ThemeGenerator.Current.GetParametersFromString(themeGeneratorParametersContent !);

            var baseColorScheme = generatorParameters.BaseColorSchemes.First(x => x.Name == baseColor);

            var colorScheme = new ThemeGenerator.ThemeGeneratorColorScheme
            {
                Name = accentColor.ToString()
            };

            var themeName        = $"{baseColor}.Runtime_{colorScheme.Name}";
            var themeDisplayName = $"Runtime {colorScheme.Name} ({baseColor})";

            if (isHighContrast)
            {
                themeDisplayName += " HighContrast";
            }

            var values = colorScheme.Values;

            var runtimeThemeColorValues = this.GetColors(accentColor, this.Options.CreateRuntimeThemeOptions(isHighContrast, generatorParameters, baseColorScheme));

            return(this.GenerateRuntimeLibraryTheme(libraryThemeProvider, values, runtimeThemeColorValues, themeTemplateContent !, themeName, themeDisplayName, baseColorScheme, colorScheme, generatorParameters));
        }