private static IEnumerable <DocumentCompositeNode> FindTemplateBindingTargets(SceneElement element) { DocumentCompositeNode elementNode = element.DocumentNode as DocumentCompositeNode; if (elementNode != null) { yield return(elementNode); } IEnumerator <DocumentNode> descendants = element.DocumentNode.DescendantNodes.GetEnumerator(); while (descendants.MoveNext()) { DocumentNode descendant = descendants.Current; if (PlatformTypes.FrameworkTemplate.IsAssignableFrom((ITypeId)descendant.Type) || PlatformTypes.Style.IsAssignableFrom((ITypeId)descendant.Type)) { IDescendantEnumerator descendantEnumerator = descendants as IDescendantEnumerator; if (descendantEnumerator != null) { descendantEnumerator.SkipPastDescendants(descendant); } } else { DocumentCompositeNode compositeNode = descendant as DocumentCompositeNode; if (compositeNode != null) { yield return(compositeNode); } } } }
private static IEnumerable <DocumentNode> TraverseDocumentDescendants(DocumentNode node, ISearchPredicate continueTester, SceneViewModel viewModel) { if (node.ChildNodesCount != 0) { IEnumerator <DocumentNode> descendantEnumerator = node.DescendantNodes.GetEnumerator(); while (descendantEnumerator.MoveNext()) { DocumentNode current = descendantEnumerator.Current; yield return(current); if (continueTester != null && !continueTester.Test(viewModel.GetSceneNode(current))) { IDescendantEnumerator descendantEnumerator1 = descendantEnumerator as IDescendantEnumerator; if (descendantEnumerator1 != null) { descendantEnumerator1.SkipPastDescendants(current); } } } } }