让 HierachichalDataTemplate 首先显示 children。 (Post-order (LRN))
Make HierachichalDataTemplate display children first. (Post-order (LRN))
我想显示当前元素的路径,如下所示:
Node1 > Node1_1 > Node1_1_1
路径保存在 Parent 个元素的链中,对于上面给出的示例:
Node1_1_1.Parent == Node1_1
Node1_1.Parent == Node1
我认为存档此结果的最简单方法是使用 HierachichalDataTemplate
,它首先显示 children,然后将其自身显示为 > Node.Name
。从 Node1_1_1
元素开始。
问题是 HierachichalDataTemplate
先显示当前 DataContext
,然后显示 children。我基本上想存档 post-order 遍历我的 Parent
-tree.
有什么方法可以存档吗?我考虑过以某种方式重新定义 HierachichalDataTemplate
的模板,但我对 WPF 的了解还不够,无法自己存档。
我不完全确定你所说的 "displaying the path" 是什么意思,但我想你希望能够 select 树视图中的项目并在单独的文本框控件中显示其路径,例如Windows 探索者。如果是这种情况,您需要跟踪 selected 项并在 selected 项更改时将其父关系解析为根。
也就是说,您的视图模型中的每个项目都需要像这样实现一个父接口(假设每个视图模型项目都实现一个 IItem 接口,如下所示:
https://github.com/Dirkster99/InplaceEditBoxLib/blob/1a25512c7a5c4611809162d625ff9137a4ccb456/source/Solution/SolutionLib/Interfaces/IParent.cs)
public interface IParent
{
IItem Parent { get; }
}
此界面使您可以通过使用 while 循环浏览树根来积累路径,如下所示:
IItem node = MyTree.SelectedItem;
string path = MyTree.SelectedItem.Name; //Assuming you have a SelectedItem
while (node.Parent != null)
{
path = path.Parent.Name + " > " + path;
}
我想显示当前元素的路径,如下所示:
Node1 > Node1_1 > Node1_1_1
路径保存在 Parent 个元素的链中,对于上面给出的示例:
Node1_1_1.Parent == Node1_1
Node1_1.Parent == Node1
我认为存档此结果的最简单方法是使用 HierachichalDataTemplate
,它首先显示 children,然后将其自身显示为 > Node.Name
。从 Node1_1_1
元素开始。
问题是 HierachichalDataTemplate
先显示当前 DataContext
,然后显示 children。我基本上想存档 post-order 遍历我的 Parent
-tree.
有什么方法可以存档吗?我考虑过以某种方式重新定义 HierachichalDataTemplate
的模板,但我对 WPF 的了解还不够,无法自己存档。
我不完全确定你所说的 "displaying the path" 是什么意思,但我想你希望能够 select 树视图中的项目并在单独的文本框控件中显示其路径,例如Windows 探索者。如果是这种情况,您需要跟踪 selected 项并在 selected 项更改时将其父关系解析为根。
也就是说,您的视图模型中的每个项目都需要像这样实现一个父接口(假设每个视图模型项目都实现一个 IItem 接口,如下所示: https://github.com/Dirkster99/InplaceEditBoxLib/blob/1a25512c7a5c4611809162d625ff9137a4ccb456/source/Solution/SolutionLib/Interfaces/IParent.cs)
public interface IParent
{
IItem Parent { get; }
}
此界面使您可以通过使用 while 循环浏览树根来积累路径,如下所示:
IItem node = MyTree.SelectedItem;
string path = MyTree.SelectedItem.Name; //Assuming you have a SelectedItem
while (node.Parent != null)
{
path = path.Parent.Name + " > " + path;
}