最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下。
展开代码如下,其中
SwitchTree是treeview空间的名称,TreeNode 是绑定在树上的数据类的名称,请注意
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;
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;
TreeViewItem treeNode = RecurFindeNode(n, m_item);
if (treeNode != null)
tv = treeNode;
break;
//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();
转载于:https://www.cnblogs.com/wuyaxiansheng/p/11130939.html
最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下。展开代码如下,其中SwitchTree是treeview空间的名称,TreeNode 是绑定在树上的数据类的名称,请注意private void ExpendTree(TreeNode node) { ...
解决问题的思路是,得到从树的根节点到特定节点的路线,并打开所有父节点。但是曲折的地方就是如何得到下一级的子节点,也就是如何从Items集合中取得对应的TreeViewItem并set IsExpanded = true。
TreeView的Items集合和TreeViewItem的Items集合都是从ItemsControl父类继承过来的,在这个集合中,其实可能存放两种对象。其一是TreeV
var key = $("#txtQuery").val();
var searchElement = $("a:contains('" + key + "')");
if (searchElement.length == 0) {
alert...
问题描述:
提示:QTreeView 使用折叠功能expandAll是可以展开所有的节点,但是在做项目的时候需要展开指定位置的节点,这时候尝试使用Expand方法:
index函数:
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
使用方法:
m_treeView = new QTreeView();
今天在工作中遇到TreeView 节点展开,所做的项目中有一个根节点,下面有几个子节点,几个子节点分别又有子节点.....总共有4层吧,所有节点加载完毕后 想展开所有的节点,用了
this.treeview1.expandAll() 方法无效 后来经过多次尝试才发现
expandAll ()方法只适合 所有 子节点都属于一个根节点的情况,如果子节点还有节点,这个方法就不适用,如果要展开所有
要在 WPF TreeView 中删除节点,你可以按照以下步骤进行操作:
1. 首先,确定你要删除的节点。可以通过遍历 TreeView 的 Items 属性来查找节点。如果你知道节点的索引或者 Tag 值,可以使用 FindItem 方法来定位节点。
2. 一旦找到要删除的节点,可以使用 Items.Remove 或者 Items.RemoveAt 方法将节点从 TreeView 中移除。如果你想删除所有子节点,可以使用 Items.Clear 方法。
3. 最后,记得更新 TreeView 的显示,可以通过调用 UpdateLayout 方法来实现。
下面是一个简单的示例代码,演示了如何删除 TreeView 中选中的节点:
```csharp
private void RemoveSelectedNode()
// 获取选中的节点
var selectedNode = myTreeView.SelectedItem as TreeViewItem;
if (selectedNode == null)
return;
// 获取选中节点的父节点
var parentNode = VisualTreeHelper.GetParent(selectedNode) as TreeViewItem;
if (parentNode == null)
return;
// 从父节点中移除选中节点
parentNode.Items.Remove(selectedNode);
// 更新 TreeView 的显示
myTreeView.UpdateLayout();
请注意,这只是一个基本示例,具体的实现可能会根据你的需求有所不同。希望这能帮助到你!如果还有其他问题,请随时提问。