得到一个孩子在WPF C#树视图的父节点 [英] Get the Parent node of a Child in WPF C# TreeView
问题描述
据我所知,编程在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
<树视图名称=树视图的HorizontalAlignment =左的高度=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屋!