private static List <StyleInfo> FindDefaultStyles(ResourceDictionary sourceResources, string defaultPrefix) { var context = new DefaultStylesContext(); FindDefaultStyles(context, sourceResources, defaultPrefix); return(context.Styles); }
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); } }