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

親がnullになるまで、親を反復処理できます。次に、ルートノードがあります。

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 に答える