在 WPF C# TreeView 中获取子节点的父节点
Get the Parent node of a Child in WPF C# TreeView
我知道使用 WPF 在 C# 中编程不同于传统的 C# 程序,因此大多数在线 material 没有说明我需要什么。
我的 WPF Window 中有一个 TreeView 控件,其中有父节点和子节点。我想将它们存储在类型为 Node (id, name, parent) 的列表中。
我使用以下命令获得了所选 item/node 的名称:
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
TreeViewItem item = treeView.SelectedItem as TreeViewItem;
nameTxt.Text = item.Header.ToString();
}
我尝试在它之前立即获取子节点的父节点:
TreeViewItem item = treeView.SelectedItem as TreeViewItem;
nameTxt.Text = item.Parent.ToString();
但是,这个returns Root Parent (A) 而不是child的parent(也就是2)。
我应该做哪些更改才能获得子项的直接父项而不是根父项? :)
编辑:这是 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>
创建了一个小示例来演示您的问题
在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>
在代码隐藏中,即 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;
}
完成了。
我知道使用 WPF 在 C# 中编程不同于传统的 C# 程序,因此大多数在线 material 没有说明我需要什么。
我的 WPF Window 中有一个 TreeView 控件,其中有父节点和子节点。我想将它们存储在类型为 Node (id, name, parent) 的列表中。
我使用以下命令获得了所选 item/node 的名称:
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
TreeViewItem item = treeView.SelectedItem as TreeViewItem;
nameTxt.Text = item.Header.ToString();
}
我尝试在它之前立即获取子节点的父节点:
TreeViewItem item = treeView.SelectedItem as TreeViewItem;
nameTxt.Text = item.Parent.ToString();
但是,这个returns Root Parent (A) 而不是child的parent(也就是2)。
我应该做哪些更改才能获得子项的直接父项而不是根父项? :)
编辑:这是 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>
创建了一个小示例来演示您的问题
在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>
在代码隐藏中,即 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;
}
完成了。