TreeViewItem.ParentTreeViewItem 是内部的,但有办法获得它吗?
TreeViewItem.ParentTreeViewItem is internal but is there a way to get it?
我正在尝试编写可以接受 Key.Down
和 Key.Up
的代码,并更改使用多个 HierarchicalDataTemplate
的 TreeView
的选择。在 TreeViewItem
的子节点中,我需要获取其父节点,以便确定下一个节点应该被选中。我注意到 TreeViewItem
有一个 ParentTreeViewItem
属性,但它设置为内部,因此无法访问。是否有另一种方法来模拟如何将 TreeViewItem
的父级作为 TreeViewItem
?注意:使用 HierarchicalDataTemplate
时,Parent
始终为空。提前致谢。
使用TreeViewItem.Parent 属性,如果parent属性为null,表示没有父节点
<TreeView>
<TreeViewItem Header="root">
<TreeViewItem Header="child" Name="child_item"></TreeViewItem>
</TreeViewItem>
</TreeView>
您始终可以使用 VisualTreeHelper.GetParent
查找任何父元素:
private bool TryGetVisualParent<TParent>(DependencyObject element, out TParent parent) where TParent : DependencyObject
{
parent = null;
if (element is null)
{
return false;
}
element = VisualTreeHelper.GetParent(element);
if (element is TParent parentElement)
{
parent = parentElement;
return true;
}
return TryGetVisualParent(element, out parent);
}
用法示例
private void OnTreeViewItem_Selcted(object sender, RoutedEventArgs e)
{
var selectedItem = e.OriginalSource as TreeViewItem;
if (TryGetVisualParent(selectedItem, out TreeViewItem parentItem))
{
// Handle 'parentItem'
}
}
我正在尝试编写可以接受 Key.Down
和 Key.Up
的代码,并更改使用多个 HierarchicalDataTemplate
的 TreeView
的选择。在 TreeViewItem
的子节点中,我需要获取其父节点,以便确定下一个节点应该被选中。我注意到 TreeViewItem
有一个 ParentTreeViewItem
属性,但它设置为内部,因此无法访问。是否有另一种方法来模拟如何将 TreeViewItem
的父级作为 TreeViewItem
?注意:使用 HierarchicalDataTemplate
时,Parent
始终为空。提前致谢。
使用TreeViewItem.Parent 属性,如果parent属性为null,表示没有父节点
<TreeView>
<TreeViewItem Header="root">
<TreeViewItem Header="child" Name="child_item"></TreeViewItem>
</TreeViewItem>
</TreeView>
您始终可以使用 VisualTreeHelper.GetParent
查找任何父元素:
private bool TryGetVisualParent<TParent>(DependencyObject element, out TParent parent) where TParent : DependencyObject
{
parent = null;
if (element is null)
{
return false;
}
element = VisualTreeHelper.GetParent(element);
if (element is TParent parentElement)
{
parent = parentElement;
return true;
}
return TryGetVisualParent(element, out parent);
}
用法示例
private void OnTreeViewItem_Selcted(object sender, RoutedEventArgs e)
{
var selectedItem = e.OriginalSource as TreeViewItem;
if (TryGetVisualParent(selectedItem, out TreeViewItem parentItem))
{
// Handle 'parentItem'
}
}