0

给定一个树中的随机 TreeViewItem,我如何检索节点的祖父,呃根?

单击子项时,我正在使用它来突出显示根。

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

4 回答 4

2

我猜你的意思是“父母”,

看看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;
    }
于 2012-08-31T08:34:43.937 回答
2


你可以尝试这样的事情:

TreeViewItem root = treeViewItem;
while( root.Parent != null )
{
    root = root.Parent;
}
// now "root" contains the root of you tree...
于 2012-08-31T08:36:56.337 回答
0

您可以遍历父母,直到父母为空。那么你就有了根节点。

TreeNode root = node.Parent;
while(root != null)
root = root.Parent;
于 2012-08-31T08:37:45.333 回答
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;
} 
于 2012-08-31T09:08:35.190 回答