Ejemplo n.º 1
0
        private static List <StyleInfo> FindDefaultStyles(ResourceDictionary sourceResources, string defaultPrefix)
        {
            var context = new DefaultStylesContext();

            FindDefaultStyles(context, sourceResources, defaultPrefix);

            return(context.Styles);
        }
Ejemplo n.º 2
0
        private static void FindDefaultStyles(DefaultStylesContext context, ResourceDictionary sourceResources, string defaultPrefix)
        {
            var uri = sourceResources.Source;

            if (uri != null)
            {
                var uriName = uri.ToString();
                if (!string.IsNullOrWhiteSpace(uriName))
                {
                    if (context.ParsedDictionaries.Contains(uriName))
                    {
                        return;
                    }

                    context.ParsedDictionaries.Add(uriName);
                }
            }

            var keys = (from key in sourceResources.Keys as ICollection <object>
                        let stringKey = key as string
                                        where stringKey != null &&
                                        (stringKey).StartsWith(defaultPrefix, StringComparison.Ordinal) &&
                                        (stringKey).EndsWith(DefaultKeyPostfix, StringComparison.Ordinal)
                                        select stringKey).Distinct().ToList();

            foreach (var key in keys)
            {
                try
                {
                    if (sourceResources[key] is Style style)
                    {
                        context.Styles.Add(new StyleInfo(key)
                        {
                            Style            = style,
                            SourceDictionary = sourceResources,
                            TargetType       = style.TargetType,
                        });
                    }
                }
                catch (Exception ex)
                {
                    Log.Warning(ex, $"Failed to add a default style ('{key}') definition to the list of styles");
                }
            }

            foreach (var resourceDictionary in sourceResources.MergedDictionaries)
            {
                FindDefaultStyles(context, resourceDictionary, defaultPrefix);
            }
        }