public static IEnumerable <Uri> FindReferencedDictionaries(DocumentCompositeNode node) { HashSet <Uri> uris = new HashSet <Uri>(); IPropertyId resourcesProperty = node.Type.Metadata.ResourcesProperty; if (resourcesProperty != null) { DocumentCompositeNode item = node.Properties[resourcesProperty] as DocumentCompositeNode; if (item != null) { node = item; } } if (PlatformTypes.ResourceDictionary.IsAssignableFrom(node.Type)) { ResourceNodeHelper.FindReferencedDictionariesInternal(node, uris); } return(uris); }
private static void FindReferencedDictionaryFromSource(DocumentCompositeNode resourceDictionaryNode, HashSet <Uri> dictionaries) { DocumentCompositeNode rootNode; Uri uriValue = resourceDictionaryNode.GetUriValue(KnownProperties.ResourceDictionarySourceProperty); if (uriValue != null) { uriValue = resourceDictionaryNode.Context.MakeDesignTimeUri(uriValue); if (uriValue != null && uriValue.IsAbsoluteUri && !dictionaries.Contains(uriValue)) { dictionaries.Add(uriValue); DocumentCompositeNode documentCompositeNode = null; IDocumentRoot documentRoot = null; try { documentRoot = resourceDictionaryNode.Context.GetDocumentRoot(uriValue.OriginalString); if (documentRoot != null) { if (documentRoot.IsEditable) { rootNode = documentRoot.RootNode as DocumentCompositeNode; } else { rootNode = null; } documentCompositeNode = rootNode; } } catch (IOException oException) { } catch (NotSupportedException notSupportedException) { } if (documentCompositeNode != null && PlatformTypes.ResourceDictionary.IsAssignableFrom(documentCompositeNode.Type)) { ResourceNodeHelper.FindReferencedDictionariesInternal(documentCompositeNode, dictionaries); } } } }