WPF TreeView 展开到指定节点
2024-08-28 09:01:43
最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下。
展开代码如下,其中
SwitchTree是treeview空间的名称,TreeNode 是绑定在树上的数据类的名称,请注意
private void ExpendTree(TreeNode node)
{
SwitchTree.UpdateLayout();
for (int i = ; 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(); }
}
}
最新文章
- Java内存管理和垃圾回收
- Linux 套接字编程中要注意的细节
- Testlink接口使用方法-python语言远程调用
- pyqt信号事件相关网址说明及python相关
- Silverlight中无法设置卫星程序集为中立资源程序集
- PHP之运用CI用钩子实现URL权限控制————————【Badboy】
- 记一些让footer始终位于网页底部的方法
- 201521123054 《Java程序设计》 第十周学习总结
- Git详解之五:分布式Git
- 用js来实现那些数据结构10(集合02-集合的操作)
- Java使用线程池
- 【PyQt5-Qt Designer】QMessageBox 弹出框总结
- 一道cf水题再加两道紫薯题的感悟
- 【IT笔试面试题整理】字符串的组合
- MyBatis3-实现MyBatis分页
- 用L脚本语言实现&;quot;L脚本语言控制台&;quot;
- 【hdu1005】Number Sequence
- iOS-UI控件概述
- Flask实战第39天:完成前台注册界面
- ajax用json实现数据传输