在WPF树视图中获取FullPath?
如果我以编程方式创建WPF TreeView,例如:
// TreeView treeView; <- added in the designer TreeViewItem rootNode = new TreeViewItem(); rootNode.Header = "RootNode" treeView.Items.Add(rootNode); TreeViewItem subNode1 = new TreeViewItem(); subNode1.Header = "SubNode1"; rootNode.Items.Add(subNode1); TreeViewItem subNode2 = new TreeViewItem(); subNode2.Header = "SubNode2"; rootNode.Items.Add(subNode2);
但是,我想获取树视图中某个节点的路径,就像System.Windows.Forms.TreeNode
类中的FullPath
属性一样。 所以subNode2
的路径是RootNode//SubNode2
。 我该怎么做呢?
编辑:我不是在寻找手动解决方案,但是我想知道是否有像FullPath
这样的等效访问FullPath
或者我是否会以错误的方式使用WPF TreeView类。 例如。 我查看了DisplayMemberPath
和SelectedValuePath
但它们似乎没有提供我所追求的结果。
看看我的回答:
Silverlight:确定父TreeViewItem?
确定路径然后很简单:
public string GetFullPath(TreeViewItem node) { if (node == null) throw new ArgumentNullException(); var result = Convert.ToString(node.Header); for (var i = GetParentItem(node); i != null; i = GetParentItem(i)) result = i.Header + "\\" + result; return result; }
见下面的代码。
所以这个函数返回一个堆栈,其中最顶层的项目将是root,最后一个项目将是element的直接父项。
public partial class Window1 : Window { public Window1() { InitializeComponent(); TreeViewItem rootNode = new TreeViewItem(); rootNode.Header = "RootNode"; treeView.Items.Add(rootNode); TreeViewItem subNode1 = new TreeViewItem(); subNode1.Header = "SubNode1"; rootNode.Items.Add(subNode1); TreeViewItem subNode2 = new TreeViewItem(); subNode2.Header = "SubNode2"; rootNode.Items.Add(subNode2); TreeViewItem subNode3 = new TreeViewItem(); subNode3.Header = "SubNode3"; subNode2.Items.Add(subNode3); } public static Stack GetNodeParent(UIElement element) { Stack tempNodePath = new Stack (); // Walk up the element tree to the nearest tree view item. TreeViewItem container = element as TreeViewItem; while ((element != null)) { element = VisualTreeHelper.GetParent(element) as UIElement; container = element as TreeViewItem; if(container!=null) tempNodePath.Push(container); } return tempNodePath; } private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs