得到一个孩子在WPF C#树视图的父节点 [英] Get the Parent node of a Child in WPF C# TreeView

查看:783
本文介绍了得到一个孩子在WPF C#树视图的父节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

据我所知,编程在C#中使用WPF是从传统的C#程序不同,所以大部分的网上材料没有说明我需要什么。

我在我的WPF窗口TreeView控件,我有父节点和子节点在里面。我想将它们存储在类型节点(ID,姓名,父)的列表。

我用这个有选择的项目/节点的名称:

 私人无效TreeViewItem_OnItemSelected(对象发件人,RoutedEventArgs E)
{
    树型视图项目= treeView.SelectedItem为树型视图;
    nameTxt.Text = item.Header.ToString();
}
 

和我试着让孩子节点的父立即之前它用这样的:

 树型视图项目= treeView.SelectedItem为树型视图;
nameTxt.Text = item.Parent.ToString();
 

不过,这将返回根家长,而不是孩子的父母(A)(也就是2)。

我应该做哪些改变来获得root父母对孩子的直接父呢? :)

编辑:下面是XAML

 <树视图名称=树视图的Horizo​​ntalAlignment =左的高度=564保证金=10,68,0,0VerticalAlignment =热门WIDTH =363 >
     <树型视图TreeViewItem.Selected =TreeViewItem_OnItemSelected标题=AIsExpanded =真高度=554字号=18>
                &所述;树型视图部首=1/>
                <树型视图标题=2/>
     < /树型视图>
< /树视图>
 

解决方案

创建了一个小例子来说明你的问题

MainWindow.xaml

 <树视图名称=树>
    <树视图>
        <树型视图标题=北美选择=TreeViewItem_OnItemSelected>
            <树型视图标题=USA>
                <树型视图标题=纽约/>
                <树型视图标题=拉斯维加斯/>
                <树型视图标题=华盛顿/>
            < /树型视图>
            <树型视图标题=加拿大>
                <树型视图标题=多伦多/>
                <树型视图标题=魁/>
                <树型视图标题=蒙特利尔/>
            < /树型视图>
            <树型视图标题=墨西哥>< /树型视图>
        < /树型视图>
    < /树视图>
< /树视图>
 

在code即后面的 MainWindow.xaml.cs

 私人无效TreeViewItem_OnItemSelected(对象发件人,RoutedEventArgs E)
    {
        树型视图项目= e.OriginalSource为树型视图;
        如果(项目!= NULL)
        {
            ItemsControl的父= GetSelectedTreeViewItemParent(项目);

            树型视图treeitem =父为树型视图;
            字符串myvalue的= treeitem .Header.ToString(); //获取你的直接父
        }
    }
    公共ItemsControl的GetSelectedTreeViewItemParent(树型视图项)
    {
        DependencyObject的父= VisualTreeHelper.GetParent(项目);
        而(!(父树型视图||父母是树视图))
        {
            父= VisualTreeHelper.GetParent(父);
        }

        返回父为ItemsControl的;
    }
 

和它的实现。

I understand that programming in C# with WPF is different from traditional C# procedures so most of the online material do not state what I need.

I have a TreeView control in my WPF Window and I have parent nodes and child nodes in it. I would like to store them in a List of type Node (id, name, parent).

I got the name of the selected item/node using this:

private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
    TreeViewItem item = treeView.SelectedItem as TreeViewItem;
    nameTxt.Text = item.Header.ToString();
}

And I tried getting the Parent of the child node immediately before it using this:

TreeViewItem item = treeView.SelectedItem as TreeViewItem;
nameTxt.Text = item.Parent.ToString();

However, this returns the Root Parent (A) instead of the child's parent (which is 2).

What changes should I make to get the child's immediate parent instead of the root parent? :)

EDIT: Here's the XAML

<TreeView Name="treeView" HorizontalAlignment="Left" Height="564" Margin="10,68,0,0" VerticalAlignment="Top" Width="363">
     <TreeViewItem TreeViewItem.Selected="TreeViewItem_OnItemSelected"  Header="A" IsExpanded="True" Height="554" FontSize="18">
                <TreeViewItem Header="1" />
                <TreeViewItem Header="2" />
     </TreeViewItem>
</TreeView>

解决方案

Created a small example to demonstrate your problem

In MainWindow.xaml

 <TreeView Name="tree">
    <TreeView>
        <TreeViewItem Header="North America" Selected="TreeViewItem_OnItemSelected">
            <TreeViewItem Header="USA">
                <TreeViewItem Header="New York"/>
                <TreeViewItem Header="Las Vegas"/>
                <TreeViewItem Header="Washington"/>
            </TreeViewItem>
            <TreeViewItem Header="Canada">
                <TreeViewItem Header="Toronto"/>
                <TreeViewItem Header="Quebec"/>
                <TreeViewItem Header="Montreal"/>
            </TreeViewItem>
            <TreeViewItem Header="Mexico"></TreeViewItem>
        </TreeViewItem>
    </TreeView>
</TreeView>

in Code Behind i.e MainWindow.xaml.cs

 private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
    {
        TreeViewItem item = e.OriginalSource as TreeViewItem;
        if (item != null)
        {
            ItemsControl parent = GetSelectedTreeViewItemParent(item);

            TreeViewItem treeitem = parent as TreeViewItem;
            string MyValue= treeitem .Header.ToString();//Gets you the immediate parent
        }
    }
    public ItemsControl GetSelectedTreeViewItemParent(TreeViewItem item)
    {
        DependencyObject parent = VisualTreeHelper.GetParent(item);
        while (!(parent is TreeViewItem || parent is TreeView))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }

        return parent as ItemsControl;
    }

And its done.

这篇关于得到一个孩子在WPF C#树视图的父节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆