예제 #1
0
        /// <summary>
        /// 将Xml节点转换成导航节点对象。
        /// </summary>
        /// <param name="nav">所属Navigation。</param>
        /// <param name="node">Xml节点。</param>
        /// <param name="Parent">父导航节点。</param>
        /// <param name="children">子导航节点列表。</param>
        private void ConvertToNode(NavigationNode parent, XmlNode node, IBundle bundle)
        {
            // 获取Id、Name、Value、Order、Permisson、Icon和Tooltip属性。
            string id   = GetAttribute(node, "Id");
            string name = GetAttribute(node, "Name");

            if (string.IsNullOrEmpty(name))
            {
                FileLogUtility.Warn("The Name attribute can not be empty for UIShell.NavigationService extension.");
                return;
            }
            string value      = GetAttribute(node, "Value");
            string order      = GetAttribute(node, "Order");
            float  orderFloat = 0;

            float.TryParse(order, out orderFloat);
            string permission = GetAttribute(node, "Permission");
            string icon       = GetAttribute(node, "Icon");
            string toolTip    = GetAttribute(node, "Tooltip");
            string parentId   = GetAttribute(node, "ParentId");
            // 创建导航节点。
            var navNode = new NavigationNode {
                ParentId   = string.IsNullOrEmpty(parentId) ? Guid.NewGuid().ToString() : parentId,
                Id         = string.IsNullOrEmpty(id) ? Guid.NewGuid().ToString() : id,
                Name       = name,
                Order      = orderFloat,
                Value      = value,
                Permission = permission,
                Icon       = icon,
                ToolTip    = toolTip,
                Bundle     = bundle
            };

            // 设置父节点,并添加到子节点列表。

            if (!string.IsNullOrEmpty(parentId))
            {
                PendingAppendedNodes.Add(navNode);
            }
            else if (string.IsNullOrEmpty(parentId))
            {
                if (parent != null)
                {
                    navNode.Parent = parent;
                    parent.Children.Add(navNode);
                }
                else
                {
                    navNode.Parent   = null;
                    navNode.ParentId = Guid.NewGuid().ToString();
                    NavigationNodeList.Add(navNode);
                }
            }

            // 将XML节点其它的属性保存到Attributes字典。
            foreach (XmlAttribute attr in node.Attributes)
            {
                if (attr.Name.Equals("Id") || attr.Name.Equals("Name") || attr.Name.Equals("Value") || attr.Name.Equals("Order") || attr.Name.Equals("Permission") || attr.Name.Equals("Icon") || attr.Name.Equals("ToolTip"))
                {
                    continue;
                }
                navNode.Attributes[attr.Name] = attr.Value;
            }
            // 遍历Xml子节点,并递归转换成导航节点。
            foreach (XmlNode childnode in node.ChildNodes)
            {
                if (childnode is XmlComment)
                {
                    continue;
                }
                ConvertToNode(navNode, childnode, bundle);
            }
        }