XamlOutlineNode BuildNode(NodeWrapper item) { XamlOutlineNode node = new XamlOutlineNode() { Name = item.Name, ElementName = item.ElementName, Marker = editor.Document.CreateAnchor(Utils.MinMax(item.StartOffset, 0, editor.Document.TextLength - 1)), EndMarker = editor.Document.CreateAnchor(Utils.MinMax(item.EndOffset, 0, editor.Document.TextLength - 1)), Editor = editor }; foreach (var child in item.Children) { node.Children.Add(BuildNode(child)); } return(node); }
public override void VisitElement(AXmlElement element) { AXmlTag tag = element.Children.FirstOrDefault() as AXmlTag; if (tag != null && tag.IsStartOrEmptyTag) { NodeWrapper node = new NodeWrapper() { ElementName = element.LocalName, StartOffset = element.StartOffset, EndOffset = element.EndOffset, Name = element.GetAttributeValue("Name") ?? element.GetAttributeValue(CompletionDataHelper.XamlNamespace, "Name"), Children = new List <NodeWrapper>() }; if (CompilationUnit.TreeRootNode == null) { CompilationUnit.TreeRootNode = node; nodeStack.Push(CompilationUnit.TreeRootNode); } else { if (nodeStack.Count > 0) { nodeStack.Peek().Children.Add(node); } if (!tag.IsEmptyTag) { nodeStack.Push(node); } } } base.VisitElement(element); if (tag != null && tag.IsStartTag) { nodeStack.PopOrDefault(); } }