WPF TreeView Expand to a specific node

Recently made a switch in management of the project, there is a switch in the tree, the tree do when searching expand the node actually a bit difficult, their own record, later used to when you can look at.

Expand code is as follows, wherein

SwitchTree is the name treeview space, TreeNode is bound to the name of the data class tree, please note
private void ExpendTree(TreeNode node)
        {
        
            SwitchTree.UpdateLayout();
            for (int i = 0; i < SwitchTree.Items.Count; i++)
            {
                TreeNode findNd = SwitchTree.Items[i] as TreeNode;
                TreeViewItem ti = SwitchTree.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem;
                if (findNd == node && ti != null)
                {
                    ti.IsExpanded = true;
                    ti.IsSelected = true;
                    if (ti.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                    {
                        ti.UpdateLayout();
                    }
                    //展开
                    EependTreeByNode(ti);
                    break;
                }
                else
                {
                    if (ti != null)
                    {
                       TreeViewItem treeViewItem= RecurFindeNode(node, ti);
                        if (treeViewItem == null)
                        {
                            ti.IsExpanded = false;
                            continue;
                        }
                        //展开
                        EependTreeByNode(treeViewItem);
                        break;
                    }
                    
                }
            }
            //EependTreeByNode(node);
        }

        private TreeViewItem RecurFindeNode(TreeNode n, TreeViewItem items)
        {
            TreeViewItem tv = null;
            if (n != null && items != null && items.HasItems)
            {
                items.IsExpanded = true;
                foreach (var item in items.Items)
                {
                    var node = item as TreeNode;
                    if (node == null || (node.nodes!=null&&!node.nodes.Any()))
                    {
                        continue;
                    }
                    if (items.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                    {
                        items.UpdateLayout();
                    }
                    TreeViewItem m_item = items.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;

                    if (n == node && m_item != null)
                    {
                        //EependTreeByNode(m_item);
                        tv = m_item;
                    }
                    else
                    {
                        
                        TreeViewItem treeNode = RecurFindeNode(n, m_item);
                        if (treeNode != null)
                        {
                            tv = treeNode;
                            break;
                        }
                        else
                        {
                            //items.IsExpanded = false;
                        }
                    }
                }
            }

            return tv;
        }

        private void EependTreeByNode(TreeViewItem contenier)
        {

            if (contenier != null)
            {
                //if (contenier.HasItems)
                //{
                    contenier.IsExpanded = true;
                    contenier.IsSelected = true;
                //}
                //else
                //{
                //    TreeViewItem parent = (TreeViewItem)contenier.Parent;
                //    if (parent != null)
                //    {
                //        parent.IsExpanded = true;
                //        parent.IsSelected = true;
                //    }
                //}
                if (contenier.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                {

                    contenier.UpdateLayout();

                }
            }
        }

 

Guess you like

Origin www.cnblogs.com/wuyaxiansheng/p/11130939.html