Получить родительский узел дочернего элемента в WPF C# TreeView
Я понимаю, что программирование на C# с WPF отличается от традиционных процедур C#, поэтому большинство онлайн-материалов не указывают, что мне нужно.
у меня есть элемент управления TreeView в моем окне WPF, и у меня есть родительские узлы и дочерние узлы в нем. Я хотел бы сохранить их в списке типа Node (id, name, parent).
я получил имя выбранного элемента / узла, используя это:
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();
однако это возвращает корневой родитель (A) вместо родителя ребенка (который равен 2).
какие изменения я должен внести, чтобы получить непосредственного родителя ребенка вместо корневого родителя? :)
EDIT: вот 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>
1 ответов
создал небольшой пример, чтобы продемонстрировать вашу проблему.
на файл 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>
в коде позади 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;
}
и готово.