/// <summary>
        /// 上移
        /// </summary>
        /// <param name="node"></param>
        public void MoveUp(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return;
            }
            int index = GetNodeIndex(node);

            //最前一个无法上移
            if (index == 0)
            {
                return;
            }
            //上移时,不激发树的SelectedItemChanged事件
            ShouldRaiseSelectedItemChangedEvent = false;
            //先删除自己,再在新位置重新插入
            tree.BeginInit();
            ItemsControl parent = GetParent(node);

            parent.Items.RemoveAt(index);
            parent.Items.Insert(index - 1, node);
            node.IsSelected = true;
            tree.EndInit();

            ShouldRaiseSelectedItemChangedEvent = true;
        }
        /// <summary>
        /// 下移
        /// </summary>
        /// <param name="node"></param>
        public void MoveDown(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return;
            }
            //共有多少个兄弟节点
            ItemsControl parent    = GetParent(node);
            int          nodeCount = parent.Items.Count;
            //获取我的索引
            int index = GetNodeIndex(node);

            //最后一个无法下移
            if (index == nodeCount - 1)
            {
                return;
            }
            //下移时,不激发树的SelectedItemChanged事件
            ShouldRaiseSelectedItemChangedEvent = false;
            //先删除自己,再在新位置重新插入
            tree.BeginInit();
            parent.Items.RemoveAt(index);
            parent.Items.Insert(index + 1, node);
            node.IsSelected = true;

            tree.EndInit();
            ShouldRaiseSelectedItemChangedEvent = true;
        }
        /// <summary>
        /// 按照路径显示节点
        /// </summary>
        /// <param name="NodePath"></param>
        /// <returns></returns>
        public TreeViewIconsItem ShowNode(String NodePath)
        {
            if (String.IsNullOrEmpty(NodePath))
            {
                return(null);
            }
            //要显示的节点就是当前节点
            TreeViewIconsItem curSelectedNode = tree.SelectedItem as TreeViewIconsItem;

            if (curSelectedNode != null && curSelectedNode.Path == NodePath)
            {
                return(null);
            }
            //查找节点
            TreeViewIconsItem node = Nodes.FirstOrDefault(n => n.Path == NodePath);

            if (node != null)
            {
                ShouldRaiseSelectedItemChangedEvent = true;
                node.IsSelected = true;
                node.IsExpanded = true;
                ExpandToNode(node);
                node.Focus();
                return(node);
            }

            return(null);
        }
        /// <summary>
        /// 查找选中节点在本层节点集合中的索引,找不到返回-1
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public int GetNodeIndex(TreeViewIconsItem node)
        {
            int index = -1;
            TreeViewIconsItem tempNode = null;
            ItemCollection    nodes    = null;

            if (node.Parent != null)
            {
                if (node.Parent == tree)
                {
                    //是一级节点,在TreeView的子节点集合中查找
                    nodes = tree.Items;
                }
                else
                {
                    //在父节点的子节点集合中查找
                    nodes = (node.Parent as TreeViewItem).Items;
                }
                //开始查找
                for (int i = 0; i < nodes.Count; i++)
                {
                    tempNode = nodes[i] as TreeViewIconsItem;
                    if (tempNode.CompareTo(node) == 0)
                    {
                        index = i;
                        break;
                    }
                }
            }
            return(index);
        }
        /// <summary>
        /// 获取后一个兄弟节点
        /// 如果己经是最后一个了,返回null
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public TreeViewIconsItem GetNextNode(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return(null);
            }
            int nodeCount = GetParent(node).Items.Count;


            int index = GetNodeIndex(node);

            if (index == nodeCount - 1)
            {
                return(null);
            }

            if (IsFirstLevelNode(node))
            {
                return(tree.Items[index + 1] as TreeViewIconsItem);
            }
            else
            {
                return((node.Parent as TreeViewIconsItem).Items[index + 1] as TreeViewIconsItem);
            }
        }
        /// <summary>
        /// 以rootElement为根节点,创建整个子树
        /// </summary>
        /// <param name="rootElement"></param>
        /// <param name="nodeIcon"></param>
        /// <returns></returns>
        private TreeViewIconsItem CreateTree(XElement rootElement)
        {
            TreeViewIconsItem root = CreateTreeViewNodeFromXElement(rootElement);

            root.Path = "/" + root.HeaderText + "/";
            root.NodeData.DataItem.Path = root.Path;
            nodesManager.nodes.Add(root);
            AddXmlNodeToTree(rootElement, root);
            return(root);
        }
Esempio n. 7
0
        /// <summary>
        /// 根据树视图第一层节点中的某一节点创建其所有子节点对应成的Xml树
        /// </summary>
        /// <param name="firstLevelNode">第一层树视图节点</param>
        /// <param name="firstLevelElement">第一层XML节点</param>
        private void CreateXmlTreeFromTreeViewIconsItem(TreeViewIconsItem firstLevelNode, XElement firstLevelElement)
        {
            XElement tempElement = null;

            foreach (var item in firstLevelNode.Items)
            {
                tempElement = CreateXElementFromTreeViewIconsItem(item as TreeViewIconsItem);
                firstLevelElement.Add(tempElement);
                CreateXmlTreeFromTreeViewIconsItem(item as TreeViewIconsItem, tempElement);
            }
        }
        /// <summary>
        /// 剪切一个节点
        /// </summary>
        /// <param name="nodeToBeCut"></param>
        public TreeViewIconsItem CutNode(TreeViewIconsItem nodeToBeCut)
        {
            if (nodeToBeCut == null)
            {
                return(null);
            }
            ShouldRaiseSelectedItemChangedEvent = true;
            ItemsControl parent = GetParent(nodeToBeCut);

            parent.Items.Remove(nodeToBeCut);
            return(nodeToBeCut);
        }
        private void CreateXmlTreeFromTreeViewIconsItem(TreeViewIconsItem rootNode, XElement element)
        {
            XElement tempElement = null;

            foreach (var item in rootNode.Items)
            {
                //加入所有子节点
                tempElement = CreateXElementFromTreeViewIconsItem(item as TreeViewIconsItem);
                element.Add(tempElement);
                CreateXmlTreeFromTreeViewIconsItem(item as TreeViewIconsItem, tempElement);
            }
        }
 /// <summary>
 /// 为跨数据库粘贴的树节点更新其路径信息
 /// </summary>
 /// <param name="newRootPath"></param>
 /// <param name="nodeAttachedToNewParent"></param>
 private void updateChildNodePath(String newRootPath, TreeViewIconsItem nodeAttachedToNewParent)
 {
     if (nodeAttachedToNewParent != null)
     {
         String oldChildTreeRootPath = nodeAttachedToNewParent.Path;
         nodeAttachedToNewParent.Path = newRootPath + nodeAttachedToNewParent.HeaderText + "/";
         nodesManager.nodes.Add(nodeAttachedToNewParent);
         foreach (var child in nodeAttachedToNewParent.Items)
         {
             updateChildNodePath(nodeAttachedToNewParent.Path, (child as TreeViewIconsItem));
         }
     }
 }
Esempio n. 11
0
 private void ClickToReName(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     if (e.OriginalSource is TextBlock)
     {
         if (IsInEditMode)
         {
             SelectedItem.EndEdit();
         }
         TreeViewIconsItem selectedNode = SelectedItem as TreeViewIconsItem;
         if (selectedNode != null)
         {
             selectedNode.BeginEdit();
         }
     }
 }
        private XElement CreateXElementFromTreeViewIconsItem(TreeViewIconsItem node)
        {
            XElement element = new XElement("TreeNode");

            element.SetAttributeValue("Title", node.HeaderText);
            element.SetAttributeValue("NodeType", node.NodeData.DataItem.NodeType);
            element.SetAttributeValue("FontWeight", node.FontWeight);
            if (node.Foreground != Brushes.White)
            {
                element.SetAttributeValue("Foreground", node.MyForeground);
            }


            return(element);
        }
Esempio n. 13
0
        /// <summary>
        /// 删除节点时,在节点集合中删除它及所有子节点
        /// </summary>
        /// <param name="node"></param>
        public void DeleteNode(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return;
            }

            var query = from n in nodes
                        where n.Path.StartsWith(node.Path)
                        select n;
            List <TreeViewIconsItem> nodesToBeDeletes = query.ToList();

            foreach (var n in nodesToBeDeletes)
            {
                nodes.Remove(n);
            }
        }
        /// <summary>
        /// 获取指定节点的所有孩子
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public List <TreeViewIconsItem> GetChildren(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return(null);
            }
            List <TreeViewIconsItem> children = new List <TreeViewIconsItem>();
            TreeViewIconsItem        tempNode = null;

            foreach (var item in node.Items)
            {
                tempNode = item as TreeViewIconsItem;
                if (tempNode != null)
                {
                    children.Add(tempNode);
                }
            }
            return(children);
        }
        /// <summary>
        /// 从Xml文件中装入树
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="nodeIcon"></param>
        public void LoadFromXmlFile(String FileName)
        {
            if (File.Exists(FileName) == false)
            {
                return;
            }
            tree.Items.Clear();
            nodesManager.nodes.Clear();
            String   xml     = File.ReadAllText(FileName);
            XElement xmlTree = XElement.Parse(xml);

            //XElement xmlTree = XElement.Load(FileName);

            foreach (var item in xmlTree.Elements())
            {
                TreeViewIconsItem root = CreateTree(item);
                tree.Items.Add(root);
            }
        }
        /// <summary>
        /// 将element的所有子节点添加为rootNode的子节点,递归进行
        /// </summary>
        /// <param name="element"></param>
        /// <param name="rootNode"></param>
        /// <param name="nodeIcon"></param>
        private void AddXmlNodeToTree(XElement element, TreeViewIconsItem rootNode)
        {
            if (element == null)
            {
                return;
            }

            TreeViewIconsItem tempNode = null;

            foreach (var item in element.Elements())
            {
                tempNode      = CreateTreeViewNodeFromXElement(item);
                tempNode.Path = rootNode.Path + tempNode.HeaderText + "/";
                tempNode.NodeData.DataItem.Path = tempNode.Path;
                rootNode.Items.Add(tempNode);
                nodesManager.nodes.Add(tempNode);
                //递归处理树节点
                AddXmlNodeToTree(item, tempNode);
            }
        }
        /// <summary>
        /// 从Xml字串中装入树
        /// </summary>
        /// <param name="xml"></param>
        /// <param name="nodeIcon"></param>
        public void LoadFromXmlString(String xml)
        {
            if (String.IsNullOrEmpty(xml))
            {
                return;
            }
            //除去字串前面可能有的BOM,即字符65279,XElement解析时会报告错误
            int index = xml.IndexOf("<");

            if (index != 0)
            {
                xml = xml.Substring(index);
            }
            XElement xmlTree = XElement.Parse(xml);

            foreach (var item in xmlTree.Elements())
            {
                TreeViewIconsItem root = CreateTree(item);
                tree.Items.Add(root);
            }
        }
        /// <summary>
        /// 获取前一个兄弟节点
        /// 如果己经是第一个了,返回null
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public TreeViewIconsItem GetPrevNode(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return(null);
            }
            int index = GetNodeIndex(node);

            if (index == 0)
            {
                return(null);
            }

            if (IsFirstLevelNode(node))
            {
                return(tree.Items[index - 1] as TreeViewIconsItem);
            }
            else
            {
                return((node.Parent as TreeViewIconsItem).Items[index - 1] as TreeViewIconsItem);
            }
        }
 /// <summary>
 /// 删除指定的节点,同时更新内存中的节点数据及数据库中的记录
 /// </summary>
 /// <param name="selectedNode"></param>
 public void DeleteNode(TreeViewIconsItem selectedNode)
 {
     if (selectedNode == null || selectedNode.Parent == null)
     {
         return;
     }
     ShouldRaiseSelectedItemChangedEvent = true;
     if (selectedNode.Parent == tree)
     {
         tree.Items.Remove(selectedNode);
     }
     else
     {
         (selectedNode.Parent as TreeViewIconsItem).Items.Remove(selectedNode);
     }
     //更新内存中的节点集合
     nodesManager.DeleteNode(selectedNode);
     //更新数据库
     if (_nodePathManager != null)
     {
         _nodePathManager.DeleteDataInfoObjectOfNodeAndItsChildren(selectedNode.Path);
     }
 }
        // <summary>
        /// 从XElement中创建TreeViewIconsItem对象,不理会其子节点
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        private TreeViewIconsItem CreateTreeViewNodeFromXElement(XElement element)
        {
            if (element == null)
            {
                return(null);
            }
            NodeDataObject    nodeDataObject = NodeFactory.CreateDataInfoNode(element.Attribute("NodeType").Value, EFConnectionString);
            TreeViewIconsItem node           = new TreeViewIconsItem(this, nodeDataObject);

            node.HeaderText = element.Attribute("Title").Value;
            if (element.Attribute("Foreground") != null)
            {
                String color = element.Attribute("Foreground").Value;

                node.MyForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString(color));
            }
            else
            {
                //默认为黑色
                node.Foreground = Brushes.Black;
            }

            if (element.Attribute("FontWeight") != null)
            {
                String FontWeight = element.Attribute("FontWeight").Value;
                if (FontWeight != "Normal")
                {
                    node.FontWeight = FontWeights.ExtraBold;
                }
                else
                {
                    node.FontWeight = FontWeights.Normal;
                }
            }
            node.Icon = nodeDataObject.DataItem.NormalIcon;
            return(node);
        }
        /// <summary>
        /// 左移(即升级)
        /// 1.已是顶级节点则不动
        /// 2.成为父节点的兄弟
        /// </summary>
        /// <param name="node"></param>
        public void MoveLeft(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return;
            }
            //己经是顶级节点
            if (IsFirstLevelNode(node))
            {
                return;
            }
            //左移时,不激发树的SelectedItemChanged事件
            ShouldRaiseSelectedItemChangedEvent = false;
            //记录下当前路径
            String oldPath = node.Path;
            //查找父节点
            TreeViewIconsItem parent = GetParent(node) as TreeViewIconsItem;
            int parentIndex          = GetNodeIndex(parent);
            //查找爷爷节点
            ItemsControl grandfather = GetParent(parent);
            String       newPath     = "";

            //获取新路径
            if (grandfather == tree)
            {
                newPath = "/" + node.HeaderText + "/";
            }
            else
            {
                newPath = (grandfather as TreeViewIconsItem).Path + node.HeaderText + "/";
            }
            if (IsNodeExisted(newPath))
            {
                MessageBox.Show("己经存在相同路径的节点,不允许升级");
                return;
            }
            tree.BeginInit();
            //先移除自己
            parent.Items.Remove(node);
            //插入成为父亲的兄弟节点
            grandfather.Items.Insert(parentIndex + 1, node);

            node.Path = newPath;
            node.NodeData.DataItem.Path = newPath;
            //更新所有内存相关子节点集合的路径
            nodesManager.UpdateNodePath(oldPath, newPath);
            if (_nodePathManager != null)
            {
                //更新数据库中相关子节点的路径
                _nodePathManager.UpdateNodePath(oldPath, newPath);
            }

            node.IsSelected = true;

            tree.EndInit();
            ShouldRaiseSelectedItemChangedEvent = true;
            //激发事件
            if (NodeMove != null)
            {
                NodeMoveEventArgs e = new NodeMoveEventArgs
                {
                    MoveType = NodeMoveType.NodeMoveLeft,
                    Node     = node,
                    PrevPath = oldPath
                };
                NodeMove(node, e);
            }
        }
        /// <summary>
        /// 添加节点
        /// 成功返回新节点,不成功,返回null
        /// 新节点自动展开且选中
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="nodeText"></param>
        /// <param name="nodeIcon"></param>
        /// <returns></returns>
        private TreeViewIconsItem addNode(AddNodeCategory addType, TreeViewIconsItem selectedNode, String nodeText, NodeDataObject nodeDataObject)
        {
            if (selectedNode != null)
            {
                selectedNode.IsExpanded = true;
            }
            ShouldRaiseSelectedItemChangedEvent = true;

            TreeViewIconsItem treeNode = new TreeViewIconsItem(this, nodeDataObject);

            treeNode.HeaderText = nodeText;
            treeNode.Icon       = nodeDataObject.DataItem.NormalIcon;
            //自动展开
            treeNode.IsExpanded = true;
            switch (addType)
            {
            case AddNodeCategory.AddRoot:
                treeNode.Path = "/" + nodeText + "/";
                nodeDataObject.DataItem.Path = treeNode.Path;
                tree.Items.Add(treeNode);
                nodesManager.nodes.Add(treeNode);
                break;

            case AddNodeCategory.AddChild:
                if (selectedNode != null)
                {
                    treeNode.Path = selectedNode.Path + nodeText + "/";
                    nodeDataObject.DataItem.Path = treeNode.Path;
                    selectedNode.Items.Add(treeNode);
                    nodesManager.nodes.Add(treeNode);
                }
                else
                {
                    return(null);
                }
                break;

            case AddNodeCategory.AddSibling:
                if (selectedNode != null && selectedNode.Parent != null)
                {
                    //如果选中节点是顶层节点
                    if (selectedNode.Parent == tree)
                    {
                        treeNode.Path = "/" + nodeText + "/";
                        nodeDataObject.DataItem.Path = treeNode.Path;
                        tree.Items.Add(treeNode);
                    }
                    else
                    {
                        //不是顶层节点
                        TreeViewIconsItem parent = selectedNode.Parent as TreeViewIconsItem;
                        treeNode.Path = parent.Path + nodeText + "/";
                        nodeDataObject.DataItem.Path = treeNode.Path;
                        parent.Items.Add(treeNode);
                    }
                    nodesManager.nodes.Add(treeNode);
                }
                else      //当前没有选中节点或选中节点没有父亲
                {
                    return(null);
                }

                break;

            default:
                break;
            }
            if (_autoSelectNewNode)
            {
                treeNode.IsSelected = true;
            }

            //更新树的存储
            String treeXml = saveToXmlString();

            if (_repository != null)
            {
                _repository.SaveTree(treeXml);
            }


            return(treeNode);
        }
        /// <summary>
        /// 粘贴节点并自动更新相关的内存,IsCrossDB表明是否是跨数据库粘贴
        /// </summary>
        /// <param name="nodeToBeCut"></param>
        /// <param name="attachToNode"></param>
        /// <param name="IsCrossDB">IsCrossDB表明是否是跨数据库粘贴</param>
        private void PasteNode(TreeViewIconsItem nodeToBeCut, TreeViewIconsItem attachToNode, bool IsCrossDB)
        {
            if (nodeToBeCut == null || nodeToBeCut.Parent != null)
            {
                return;
            }
            ShouldRaiseSelectedItemChangedEvent = true;
            String oldPath = nodeToBeCut.Path;
            String newPath = "";

            //如果attachToNode为null,则将在根节点添加子树
            if (attachToNode == null)
            {
                //newPath = "/" + nodeToBeCut.HeaderText + "/";
                newPath = "/";
            }
            else
            {
                //当前己经选中了节点,被粘贴的节点成为其子树
                newPath = attachToNode.Path + nodeToBeCut.HeaderText + "/";
            }

            tree.BeginInit();

            if (!IsCrossDB)
            {
                if (attachToNode != null)
                {
                    //被粘贴的节点成为当前选中节点的子树
                    attachToNode.Items.Add(nodeToBeCut);
                }
                else
                {
                    //在顶层放置被粘贴的节点
                    tree.Items.Add(nodeToBeCut);
                }

                //更新所有内存相关子节点集合的路径
                nodesManager.UpdateNodePath(oldPath, newPath);
                if (_nodePathManager != null)
                {
                    //更新数据库中相关子节点的路径
                    _nodePathManager.UpdateNodePath(oldPath, newPath);
                }

                tree.EndInit();
                //激发事件
                if (NodeMove != null)
                {
                    NodeMoveEventArgs e = new NodeMoveEventArgs
                    {
                        MoveType = NodeMoveType.NodePaste,
                        Node     = nodeToBeCut,
                        PrevPath = oldPath
                    };
                    NodeMove(nodeToBeCut, e);
                }
            }
            else
            {
                //跨数据库的粘贴

                if (attachToNode != null)
                {
                    //被粘贴的节点成为当前选中节点的子树
                    attachToNode.Items.Add(nodeToBeCut);
                    updateChildNodePath(attachToNode.Path, nodeToBeCut);
                }
                else
                {
                    //在顶层放置被粘贴的节点
                    tree.Items.Add(nodeToBeCut);
                    updateChildNodePath("/", nodeToBeCut);
                }


                tree.EndInit();
            }
        }
 /// <summary>
 /// 粘贴节点并自动更新相关的节点内存记录,但不更新底层数据库
 /// </summary>
 /// <param name="nodeToBeCut"></param>
 /// <param name="attachToNode"></param>
 public void PasteNodeCrossDB(TreeViewIconsItem nodeToBeCut, TreeViewIconsItem attachToNode)
 {
     PasteNode(nodeToBeCut, attachToNode, true);
 }
 /// <summary>
 /// 粘贴节点并自动更新相关的内存及数据库中的记录
 /// 要求被剪切的节点必须是“独立”的(其Parent属性==null)
 /// </summary>
 /// <param name="nodeToBeCut">被剪切的节点</param>
 /// <param name="attachToNode">将接收被剪切节点的那个节点</param>
 public void PasteNode(TreeViewIconsItem nodeToBeCut, TreeViewIconsItem attachToNode)
 {
     PasteNode(nodeToBeCut, attachToNode, false);
 }
        /// <summary>
        /// 右移(即降级)
        /// 1.无兄弟节点则不动
        /// 2.如有兄弟节点,则成为上一个兄弟节点的子节点
        /// 3.如果本身是所有兄弟节点中的第一个,则成为下一个兄弟的子节点
        /// </summary>
        /// <param name="node"></param>
        public void MoveRight(TreeViewIconsItem node)
        {
            if (node == null)
            {
                return;
            }
            //右移时,不激发树的SelectedItemChanged事件
            ShouldRaiseSelectedItemChangedEvent = false;
            //记录下当前路径
            String oldPath = node.Path;

            ItemsControl parent = GetParent(node);
            //查找兄弟节点
            TreeViewIconsItem prevBrother = GetPrevNode(node);
            TreeViewIconsItem nextBrother = GetNextNode(node);

            //是独子
            if (prevBrother == null && nextBrother == null)
            {
                return;
            }
            //获取新路径
            String newPath = "";

            if (prevBrother != null)
            {
                newPath = prevBrother.Path + node.HeaderText + "/";
            }
            else
            {
                newPath = nextBrother.Path + node.HeaderText + "/";
            }
            if (IsNodeExisted(newPath))
            {
                MessageBox.Show("已经存在相同路径的节点,不允许降级。");
                return;
            }


            tree.BeginInit();
            //删除自己
            parent.Items.Remove(node);
            //插入
            if (prevBrother != null)
            {
                prevBrother.Items.Add(node);
                node.Path = newPath;
                node.NodeData.DataItem.Path = newPath;
                prevBrother.IsExpanded      = true;
            }
            else
            {
                nextBrother.Items.Add(node);
                node.Path = newPath;
                node.NodeData.DataItem.Path = newPath;
                nextBrother.IsExpanded      = true;
            }



            //更新所有内存相关子节点集合的路径
            nodesManager.UpdateNodePath(oldPath, newPath);
            if (_nodePathManager != null)
            {
                //更新数据库中相关子节点的路径
                _nodePathManager.UpdateNodePath(oldPath, newPath);
            }


            node.IsSelected = true;
            tree.EndInit();
            ShouldRaiseSelectedItemChangedEvent = true;
            //激发事件
            if (NodeMove != null)
            {
                NodeMoveEventArgs e = new NodeMoveEventArgs
                {
                    MoveType = NodeMoveType.NodeMoveRight,
                    Node     = node,
                    PrevPath = oldPath
                };
                NodeMove(node, e);
            }
        }
        /// <summary>
        /// 判断相同路径的节点是否己经存在
        /// </summary>
        /// <param name="nodePath"></param>
        /// <returns></returns>
        public bool IsNodeExisted(String nodePath)
        {
            TreeViewIconsItem item = Nodes.FirstOrDefault(p => p.Path == nodePath);

            return(item != null);
        }