3 回答
TA贡献1895条经验 获得超7个赞
您应该研究递归。本质上,您需要一个采用treeviewitem并遍历其所有子级的方法。对于每一个方法,该方法都会调用自身,并传入孩子。如果您从未做过此事,那么当您初次查看它时会有点头脑融化。了解原理。但大致来说:
private void recurseItem(TreeViewItem item)
{
foreach (var subItem in item.Items)
{
// compare header and return that item if you find it
if(!gotTheItem)
recurseItem(subItem);
}
}
您需要一个遍历树的顶级项目的foreach循环,并将每个项目传递到其中。不要只是将其粘贴(您只是学习剪切然后粘贴)阅读递归并考虑一下。请注意,您将要通过设置布尔标志来表示已找到该项目,并避免重复其余所有操作,以表示已找到该项目。
请注意,此代码主要是为了向递归的概念介绍新手。它并非旨在成为理想的剪切和粘贴解决方案。
如果使用绑定的树视图尝试此操作,则会发现Items集合具有绑定的对象,而不是treeviewitems。
TA贡献1831条经验 获得超4个赞
Andy的解决方案将满足您的需求,但是更加通用和可重用的解决方案将是迭代使用ItemCollection。有了这个,您可以传递任何继承了ItemCollectionwhile的对象类型,从而避免不包含子项目的异常。如果您的树中有不同类型的孩子,那就太好了。
private void IterateTree(ItemCollection items)
{
//Iterate each item
foreach (var item in items)
{
//Your IF logic here
//Iterate again if item contains sub items.
if (item is ItemsControl)
{
ItemsControl ic = (ItemsControl)item;
IterateTree(ic.Items); //Recursive call
}
}
}
- 3 回答
- 0 关注
- 408 浏览
添加回答
举报