如何在给定随机TreeViewItem的情况下获取节点的根

时间:2012-08-31 08:30:19

标签: c# .net wpf treeview

从树中给出一个随机的TreeViewItem,如何检索该节点的granddaddy,er?

我使用它来点击子项目时突出显示根目录。

private void TreeViewDecode_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
     TreeViewItem treeViewItem = GetSexyGrandDaddy(e.OriginalSource as DependencyObject);
     ...
}
private static TreeViewItem GetSexyGrandDaddy(DependencyObject source)
{
        if (source != null && source is TreeViewItem)
        {
            TreeViewItem root = VisualTreeHelper.GetParent(source) as TreeViewItem;

            while (root.Parent != null)
            {
                root = root.Parent as TreeViewItem;
            }
            return root as TreeViewItem;
        }
        return null;
}

编辑:更新的代码仍无效

4 个答案:

答案 0 :(得分:2)

用root你的意思是'父'我猜,

查看TreeViewItem.Parent

<强>更新 看看这段代码:

使用

    e.Source 

而不是

    e.OrginalSource

    private void treeView1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        TreeViewItem treeViewItem = GetSexyGrandDaddy(e.Source as DependencyObject);
        if (treeViewItem != null)
        {
            //do highlight...
        }
    }

    private static TreeViewItem GetSexyGrandDaddy(DependencyObject source)
    {
        TreeViewItem sugarDad = source as TreeViewItem;
        if (sugarDad != null)
        {
            while (sugarDad.Parent as TreeViewItem != null)
                sugarDad = sugarDad.Parent as TreeViewItem;
        }
        return sugarDad;
    }

答案 1 :(得分:2)


你可以尝试这样的事情:

TreeViewItem root = treeViewItem;
while( root.Parent != null )
{
    root = root.Parent;
}
// now "root" contains the root of you tree...

答案 2 :(得分:0)

您可以遍历父项,直到父项为空。然后你有了根节点。

TreeNode root = node.Parent;
while(root != null)
root = root.Parent;

答案 3 :(得分:0)

试试这个

private static TreeViewItem GetSexyGrandDaddy(DependencyObject source)
{
    if (source != null && source is TreeViewItem)
    {
        TreeViewItem root = source as TreeViewItem;

        var parent = VisualTreeHelper.GetParent(root);
        while (parent != null)
        {
            if (parent is TreeViewItem) root = parent as TreeViewItem;
            parent = VisualTreeHelper.GetParent(parent);
        }

        return root as TreeViewItem;
    }
    return null;
}