我想在TreeView中获取所选项目的根节点,例如,如果我是:
Italy
Serie A
并且用户选择Serie A
,在代码中返回意大利父根。
所以我在方法中创建了这个变量:
var country = FindRootNode(nation_team.SelectedItem);
这是方法:
private TreeViewItem FindRootNode(TreeView treeNode)
{
while (treeNode.Parent != null)
{
treeNode = (TreeView)treeNode.Parent;
}
return treeNode;
}
但我不确定此代码是否正确,无论如何,return treeNode
带有红色下划线,出现此错误:
无法在System.Windows.Controls.TreeViewItem中隐式转换System.Windows.Controls.TreeView类型
答案 0 :(得分:1)
您正在为treeNode
对象分配TreeView
TreeViewItem
个对象。
这一行:
treeNode = (TreeView)treeNode.Parent;
在使用它之前,请确保将SelectedItem强制转换为TreeViewItem,如下所示:
FindRootNode(nation_team.SelectedItem as TreeViewItem)
您正在寻找的是这种递归方法:
private TreeViewItem FindRootNode(TreeViewItem currentItem){
if(currentItem == null) return null;
var tvi = (TreeViewItem)currentItem.Parent;
if(tvi == null){
return currentItem;
}
else{
return FindRootNode(tvi);
}
}
或者这个迭代的:
private TreeViewItem FindRootNode(TreeViewItem currentItem){
if(currentItem == null) return null;
while(currentItem.Parent as TreeViewItem!= null){
currentItem = currentItem.Parent as TreeViewItem;
}
return currentItem;
}