1 using System.Collections.Generic;
2 using Tizen.NUI.Binding.Internals;
4 namespace Tizen.NUI.Xaml
6 internal class NamescopingVisitor : IXamlNodeVisitor
8 readonly Dictionary<INode, INameScope> scopes = new Dictionary<INode, INameScope>();
10 public NamescopingVisitor(HydrationContext context)
12 Values = context.Values;
15 Dictionary<INode, object> Values { get; set; }
17 public TreeVisitingMode VisitingMode => TreeVisitingMode.TopDown;
18 public bool StopOnDataTemplate => false;
19 public bool StopOnResourceDictionary => false;
20 public bool VisitNodeOnDataTemplate => true;
21 public bool SkipChildren(INode node, INode parentNode) => false;
22 public bool IsResourceDictionary(ElementNode node) => false;
24 public void Visit(ValueNode node, INode parentNode)
26 scopes[node] = scopes[parentNode];
29 public void Visit(MarkupNode node, INode parentNode)
31 scopes[node] = scopes[parentNode];
34 public void Visit(ElementNode node, INode parentNode)
36 var ns = parentNode == null || IsDataTemplate(node, parentNode) || IsStyle(parentNode) || IsVisualStateGroupList(node)
43 public void Visit(RootNode node, INode parentNode)
45 var ns = new NameScope();
50 public void Visit(ListNode node, INode parentNode)
52 scopes[node] = scopes[parentNode];
55 static bool IsDataTemplate(INode node, INode parentNode)
57 var parentElement = parentNode as IElementNode;
59 if (parentElement != null && parentElement.Properties.TryGetValue(XmlName._CreateContent, out createContent) &&
60 createContent == node)
65 static bool IsStyle(INode parentNode)
67 var pnode = parentNode as ElementNode;
68 return pnode != null && pnode.XmlType.Name == "Style";
71 static bool IsVisualStateGroupList(ElementNode node)
73 return node != null && node.XmlType.Name == "VisualStateGroup" && node.Parent is IListNode;