如何在树视图中获取子位置?

Posted

技术标签:

【中文标题】如何在树视图中获取子位置?【英文标题】:How to get child location in a treeview? 【发布时间】:2011-09-15 04:04:35 【问题描述】:

我目前有一个简单的树视图,其中包含一个父节点和多个子节点。我想知道是否有办法在父树中找到所选节点的位置。

我目前在树视图上有一个动作事件,当用户单击子项时,它会打印出所选子项的字符串值。我试过使用:

int val = TreeView.SelectedItemProperty.GlobalIndex;

但它总是返回 0。我在 VB 中看到了一些示例,但我似乎无法在 C# 中获得相同的想法。

【问题讨论】:

您在寻找笛卡尔坐标吗?还是像“grandparent\parent\child”这样的嵌套路径? 我正在寻找父节点中的订单。如果我的树视图看起来像这样:>parent -child0 -child1 -child2 -child3 如果用户点击孩子 2,我想获得值“2”(假设计数器从 0 开始) 一般性地考虑树视图,为什么需要一个订单?这通常取决于您选择的演示面板 (ContainerTemplate)。还有其他方法可以识别您的孩子吗? 我有一个项目向量,我用它来创建孩子。我想要孩子所在的位置,以便我可以将其链接回向量,因为向量元素的值与孩子在树视图中的订单号相同 如果我错了,请纠正我,但你有向量的 /entry/ 。为什么不做一个vector.IndexOf(tv.SelectedItem)? 【参考方案1】:

您必须使用 Treeview 的 ItemContainerGenerator 属性。

http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx

参见:ContainerFromIndex 和 IndexFromContainer

请注意,每个 TreeViewItem 也有一个 ItemContainerGenerator(它是一个 ItemsControl),因此如果您有多个级别,则必须递归搜索树。

【讨论】:

【参考方案2】:

我认为 wpf 中所有树视图问题(以及大多数 ui 问题)的答案是构建一个 ViewModel。每当您开始爬取可视化树以查找您已经绑定到的元素时,您都是在以艰难的方式做事。一旦您开始使用 ItemsContainerGenerator,您就必须开始担心很多您不应该担心的问题。

您正在绑定到一个层次结构。如果该结构在每个项目上都有一个选定的项目属性,并且它绑定到 TreeViewItem 选定的项目,那么您可以在代码中获取选定的项目并从那里执行其他所有操作。看看一个类似的问题here。

【讨论】:

【参考方案3】:

所以我没有找到我正在寻找的答案(我可能会将其他人与我的问题混淆。通过说出位置)。无论如何我如何解决它是我选择了孩子的字符串值并将其与我的列表进行比较。感谢那些回答的人!

【讨论】:

以上是关于如何在树视图中获取子位置?的主要内容,如果未能解决你的问题,请参考以下文章

在树视图中更改子节点的背景颜色

如何获取uibutton(UITableViewCell的子视图)相对于整个窗口iOS Objective-C的位置?

在 tkinter 的树视图中选择多行并同时获取它们

VB.NET 如何将子节点添加到树视图中的特定节点

iOS:如何检测视图周围的子视图位置

移动子视图时,如何将其子视图保留在其父视图中的同一位置?