您需要从某个列表填充 TreeView:
var paths = new List<string>
{
@"DD\flora\green_tree\tree_0",
@"DD\flora\green_tree\tree_1",
@"DD\flora\dead_tree\Dtree_2",
@"DD\flora\green_tree\tree_3",
@"DD\flora\green_tree\tree_4",
@"DD\wall\wooden_wall\wall_0",
@"DD\window\wooden_window\window_0",
@"DD\wall\wooden_wall\wall_1",
@"DD\wall\wooden_wall\wall_2",
@"DD\flora\green_bush\bush_0",
@"BD\flora\dead_bush\Dbush_1",
@"BD\flora\green_bush\bush_1"
};
我目前正在使用以下代码:
FillingTreeView(MyTreeView, paths, '\\');
private static void FillingTreeView(TreeView treeView, IEnumerable<string> paths, char separator)
{
TreeViewItem? lastNode = null;
string subPathAgg;
foreach (string path in paths)
{
lastNode = null;
subPathAgg = "";
foreach (string subPath in path.Split(separator))
{
subPathAgg += subPath + separator;
TreeViewItem? nodes = SearchTreeView(subPathAgg, treeView.Items);
if (nodes == null)
{
if (lastNode == null)
{
treeView.Items.Add(new TreeViewItem() { Header = subPath, Tag = subPathAgg });
lastNode = (TreeViewItem)treeView.Items[^1];
}
else
{
lastNode.Items.Add(new TreeViewItem() { Header = subPath, Tag = subPathAgg });
lastNode = (TreeViewItem)lastNode.Items[^1];
}
}
else
{
lastNode = nodes;
}
}
}
}
private static TreeViewItem? SearchTreeView(string subPathAgg, ItemCollection Nodes)
{
TreeViewItem? returnValue = null;
foreach (TreeViewItem node in Nodes)
{
if (string.Equals(((HeaderedItemsControl)node).Tag.ToString(), subPathAgg) == true)
{
returnValue = node;
return returnValue;
}
if (node.Items.Count > 0) returnValue = SearchTreeView(subPathAgg, node.Items);
}
return returnValue;
}
一切都几乎按其应有的方式进行,但有时结果是这样的:
如您所见,存在重复的“wooden_wall”路径,它们应该是同一节点。这是我第一次使用WPF,希望对您有所帮助。
