Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
0
        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);
                        }
                    }
                }
            }
        }