最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下。

展开代码如下,其中

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(); }
}
}

最新文章

  1. Java内存管理和垃圾回收
  2. Linux 套接字编程中要注意的细节
  3. Testlink接口使用方法-python语言远程调用
  4. pyqt信号事件相关网址说明及python相关
  5. Silverlight中无法设置卫星程序集为中立资源程序集
  6. PHP之运用CI用钩子实现URL权限控制————————【Badboy】
  7. 记一些让footer始终位于网页底部的方法
  8. 201521123054 《Java程序设计》 第十周学习总结
  9. Git详解之五:分布式Git
  10. 用js来实现那些数据结构10(集合02-集合的操作)
  11. Java使用线程池
  12. 【PyQt5-Qt Designer】QMessageBox 弹出框总结
  13. 一道cf水题再加两道紫薯题的感悟
  14. 【IT笔试面试题整理】字符串的组合
  15. MyBatis3-实现MyBatis分页
  16. 用L脚本语言实现&amp;quot;L脚本语言控制台&amp;quot;
  17. 【hdu1005】Number Sequence
  18. iOS-UI控件概述
  19. Flask实战第39天:完成前台注册界面
  20. ajax用json实现数据传输

热门文章

  1. VS2017 打包成exe
  2. 生成主键ID,唯一键id,分布式ID生成器雪花算法代码实现
  3. Run As none applicable
  4. [Java]ssh网上商城总结 标签: hibernatessh 2016-05-15 21:03 1099人阅读 评论(32)
  5. 【NS2】学习点滴
  6. sql —— having
  7. 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)
  8. 第十四届中北大学ACM程序设计竞赛 J.ZBT的游戏
  9. deepin golang微服务搭建go-micro环境
  10. idea使用积累