原文:WPF 4 目录树型显示
本篇将通过WPF4 制作简单的目录树型结构显示实例,完成本篇内容我们将作出下图所示的应用程序。
从图中我们可以看到程序主要分为两部分:左边显示本地驱动器的目录树型列表,右边显示被选中目录中的文件信息。首先,创建一个DirectoryRecord 类,通过两个泛型接口Files、Directories 分别获取文件信息和目录信息。其中使用Linq 获取目录信息时,我们只需要使用SearchOption.TopDirectoryOnly 读取当前目录文件夹信息即可,而不需使用SearchOption.AllDirectories 获取包含子文件在内的所有文件夹信息。 classDirectoryRecord{ publicDirectoryInfoInfo { get; set; } publicIEnumerable Files { get{ returnInfo.GetFiles(); } } publicIEnumerable Directories { get{ return fromdi inInfo.GetDirectories("*", SearchOption.TopDirectoryOnly) select newDirectoryRecord{ Info = di }; } }}
在中我们加入 和 分别显示目录树和文件信息。在TreeView 中通过HierarchicalDataTemplate 模板显示出目录树型层级结构,DataGrid 则通过绑定TreeView 中选择的目录而显示相应文件信息。
最后,通过Directory_Load 方法将本地磁盘目录加载到TreeView 中,并通过定义DataGridAutoGeneratingColumnEventArgs 事件fileInfoColumn_Load 在DataGrid 中过滤出想要参考的文件信息(Name、Length、FullName、IsReadOnly、LastWriteTime)。usingSystem.Collections.ObjectModel;usingSystem.IO;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Collections.Generic;namespaceWpfDirectoryTreeView{ /// ///Interaction logic for MainWindow.xaml/// public partial classMainWindow: Window{ publicMainWindow() { InitializeComponent(); Directory_Load(); fileInfo.AutoGeneratingColumn += fileInfoColumn_Load; } private voidDirectory_Load() { vardirectory = newObservableCollection(); foreach(vardrive inDriveInfo.GetDrives()) { directory.Add( newDirectoryRecord{ Info = newDirectoryInfo(drive.RootDirectory.FullName) } ); } directoryTreeView.ItemsSource = directory; } private voidfileInfoColumn_Load(objectsender, DataGridAutoGeneratingColumnEventArgse) { List requiredProperties = newList { "Name", "Length", "FullName", "IsReadOnly", "LastWriteTime"}; if(!requiredProperties.Contains(e.PropertyName)) { e.Cancel = true; } else{ e.Column.Header = e.Column.Header.ToString(); } } }}
参考资料
源代码下载