将treeviewitem显示为wpf中的网格行

基本上需要在wpf中使用treeview控件来实现这样的事情:(随机图片)

http://sofzh.miximages.com/c%23/SimpleTreeGridUX.png

节点和子节点具有相同标头的位置。

我google了很多,但我对wpf的了解并不是那么好。

这是我的父节点类:

public class Parent : PropertyChangedBase { public string ParentName { get; set; } public BindableCollection Children { get; set; } } 

和孩子:

 public class Child : PropertyChangedBase { public string ChildName { get; set; } } 

我的xaml树视图:

                         

我尝试使用Grid但显然它创建了不同的网格,所以我可以在列宽上进行中继。

我试过如何在wpf应用程序中使gridview成为treeview的子元素 ,但是他们使用ListView 。 它现在不适合我,因为treeviewitem选择function与我的树视图和后面的代码紧密耦合。

有什么想法可以做到吗? 谢谢。

试试这个xaml

                                    

c#代码

 public class Company { public string Task { get; set; } public string durationTotal { get; set; } public string HeadNote { get; set; } public List Models { get; set; } } public class Model { public string SubTask { get; set; } public string Duration { get; set; } public string Notes { get; set; } } 

  List ManufacturerList = new List(); ManufacturerList.Add(new Company() { Task = "Coding", durationTotal = "4", HeadNote = "Coding Task", Models = new List() {new Model(){SubTask = "Write", Duration = "2", Notes ="It pays the bills" }, new Model(){SubTask = "Compile", Duration = "1", Notes ="c# or go home" }, new Model(){SubTask = "Test", Duration = "1", Notes ="works on my m/c" },} }); ManufacturerList.Add(new Company() { Task = "Communicate", durationTotal = "2", HeadNote = "Communicate Task", Models = new List() {new Model(){SubTask = "Email", Duration = "0.5", Notes ="so much junk mail" }, new Model(){SubTask = "Blogs", Duration = "0.25", Notes ="blogs.msdn.com/delay" }, new Model(){SubTask = "Twitter", Duration = "0.25", Notes ="RT:nothing to report" },} }); treeviewList.ItemsSource = ManufacturerList; 

结果

在此处输入图像描述

如果您的代码唯一的问题是每个树视图项呈现不同的网格列宽度,您可以尝试“共享大小范围”function将它们全部对齐。 在TreeView控件中,将Grid.IsSharedSizeScope设置为true: –

然后将一个SharedSizeGroup添加到ColumnDefinition ,它应该在所有树视图项目中具有相同的宽度(无论如何,您的第一列定义具有固定的宽度,因此不需要它): –

      

这些值只是用于“命名”列的字符串,可以是您喜欢的任何内容。