使用复选框创建 WPF Windows 资源管理器树视图
Posted
技术标签:
【中文标题】使用复选框创建 WPF Windows 资源管理器树视图【英文标题】:Create WPF windows explorer tree view with checkbox 【发布时间】:2021-09-04 05:01:08 【问题描述】:我正在尝试创建一个 WPF Windows 资源管理器树视图文件浏览器,其中包含用于选择多个文件的复选框。复选框应仅查看文件。 像这样 enter image description here
我在 WPF 方面没有太多经验,我很难开始。
谢谢。
【问题讨论】:
您好,您可以查看此答案,并根据您的需要进行自定义:***.com/a/18751667/12655548 我已经根据这个例子 medium.com/@mikependon/… 创建了树视图。但是如何为文件添加复选框并获取选定的文件? 这能回答你的问题吗? Customizing the TreeView to allow multi select 好像作者找到了一些其他的源代码作为例子 【参考方案1】:我会给你一个最简单的想法,关于如何实现它。考虑两个类Folder
和File
(为了示例的方便,我实现了自己的简单类):
public class Folder
public List<Folder> Folders get; set; = new();
public List<File> Files get; set; = new();
public override string ToString() => Name;
public string Name get; set;
public class File
public string Name get; set;
public override string ToString() => Name;
你会有这种MultiselectTreeView
实现:
public class MultiSelectTree: TreeView
public List<File> SelectedFiles get; set; = new();
public void AddItem(object item)
if (item is Folder folder)
var root = FormFolderTreeItem(folder);
Items.Add(root);
if (item is File file)
var f = FormFileTreeItem(file);
Items.Add(f);
private TreeViewItem FormFolderTreeItem(Folder folder)
var treeItem = new TreeViewItem Header = folder ;
foreach (var subFolderItem in folder.Folders.Select(FormFolderTreeItem))
treeItem.Items.Add(subFolderItem);
foreach (var file in folder.Files.Select(FormFileTreeItem))
treeItem.Items.Add(file);
return treeItem;
private TreeViewItem FormFileTreeItem(File file)
var treeItem = new TreeViewItem ();
// wrap Files in a checkbox and set this checkbox as a content of a TreeViewItem
var checkBox = new CheckBox Content = file ;
treeItem.Header = checkBox;
// Subscribe for the checked event
// When the event triggers - add file to the SelectedFiles
checkBox.Checked += (sender, args) =>
if (sender is CheckBox chb)
SelectedFiles.Add((File)chb.Content);
args.Handled = true;
;
// Just the opposite here
checkBox.Unchecked += (sender, args) =>
if (sender is CheckBox chb)
SelectedFiles.Remove((File)chb.Content);
args.Handled = true;
;
return treeItem;
然后您可以使用SelectedFiles
属性访问您选择的文件。
这里是用法示例(Tree是MultiSelectTree
的实例):
var firstRoot = new Folder Name = "Root" ;
var secondRoot = new Folder Name = "Second Root";
firstRoot.Folders.Add(new Folder Name = "Sub folder");
secondRoot.Files.AddRange(new []
new File Name = "First file" ,
new File Name = "Second file"
);
Tree.AddItem(firstRoot);
Tree.AddItem(secondRoot);
结果你会得到这个:TreeView with checkboxes and multiselect
现在你必须弄清楚如何调整你已经在Designing a WPF TreeView File Explorer中使用的示例
【讨论】:
您好,感谢您的帮助。我从你的例子中学到了一些东西,我用另一种方式做到了。您的方法无法应用于我的树查看器。我添加了复选框以上是关于使用复选框创建 WPF Windows 资源管理器树视图的主要内容,如果未能解决你的问题,请参考以下文章
LIstView 键盘导航类似于 WPF 中的 Windows 资源管理器