不能返回TreeView的根节点

本文关键字:根节点 TreeView 返回 不能 | 更新日期: 2023-09-27 18:10:09

我想在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.TreeView

不能返回TreeView的根节点

您正在将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;
}
相关文章: