WPF 4 目录树型显示
原文:WPF 4 目录树型显示
本篇将通过WPF4 制作简单的目录树型结构显示实例,完成本篇内容我们将作出下图所示的应用程序。
从图中我们可以看到程序主要分为两部分:左边显示本地驱动器的目录树型列表,右边显示被选中目录中的文件信息。首先,创建一个DirectoryRecord 类,通过两个泛型接口Files、Directories 分别获取文件信息和目录信息。其中使用Linq 获取目录信息时,我们只需要使用SearchOption.TopDirectoryOnly 读取当前目录文件夹信息即可,而不需使用SearchOption.AllDirectories 获取包含子文件在内的所有文件夹信息。
- class DirectoryRecord
- {
- public DirectoryInfo Info { get; set; }
- public IEnumerable<FileInfo> Files
- {
- get
- {
- return Info.GetFiles();
- }
- }
- public IEnumerable<DirectoryRecord> Directories
- {
- get
- {
- return from di in Info.GetDirectories("*", SearchOption.TopDirectoryOnly)
- select new DirectoryRecord { Info = di };
- }
- }
- }
在<Gird>中我们加入<TreeView> 和<DataGrid> 分别显示目录树和文件信息。在TreeView 中通过HierarchicalDataTemplate 模板显示出目录树型层级结构,DataGrid 则通过绑定TreeView 中选择的目录而显示相应文件信息。
- <TreeView x:Name="directoryTreeView" Width="300" Height="387" Margin="12,12,0,0"
- VerticalAlignment="Top" HorizontalAlignment="Left">
- <TreeView.Resources>
- <HierarchicalDataTemplate DataType="{x:Type local:DirectoryRecord}"
- ItemsSource="{Binding Directories}" >
- <StackPanel Orientation="Horizontal">
- <Image Source="Images/folder.png" Width="16" Height="16"/>
- <TextBlock Text="{Binding Info.Name}"/>
- </StackPanel>
- </HierarchicalDataTemplate>
- </TreeView.Resources>
- </TreeView>
- <DataGrid x:Name="fileInfo" Width="548" Height="387" Margin="318,12,0,0"
- VerticalAlignment="Top" HorizontalAlignment="Left"
- GridLinesVisibility="Vertical" VerticalGridLinesBrush="Gray"
- ItemsSource="{Binding ElementName=directoryTreeView, Path=SelectedItem.Files}"/>
最后,通过Directory_Load 方法将本地磁盘目录加载到TreeView 中,并通过定义DataGridAutoGeneratingColumnEventArgs 事件fileInfoColumn_Load 在DataGrid 中过滤出想要参考的文件信息(Name、Length、FullName、IsReadOnly、LastWriteTime)。
- using System.Collections.ObjectModel;
- using System.IO;
- using System.Windows;
- using System.Windows.Controls;
- using System.Collections.Generic;
- namespace WpfDirectoryTreeView
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- Directory_Load();
- fileInfo.AutoGeneratingColumn += fileInfoColumn_Load;
- }
- private void Directory_Load()
- {
- var directory = new ObservableCollection<DirectoryRecord>();
- foreach (var drive in DriveInfo.GetDrives())
- {
- directory.Add(
- new DirectoryRecord
- {
- Info = new DirectoryInfo(drive.RootDirectory.FullName)
- }
- );
- }
- directoryTreeView.ItemsSource = directory;
- }
- private void fileInfoColumn_Load(object sender, DataGridAutoGeneratingColumnEventArgs e)
- {
- List<string> requiredProperties = new List<string>
- {
- "Name", "Length", "FullName", "IsReadOnly", "LastWriteTime"
- };
- if (!requiredProperties.Contains(e.PropertyName))
- {
- e.Cancel = true;
- }
- else
- {
- e.Column.Header = e.Column.Header.ToString();
- }
- }
- }
- }
参考资料
1. SearchOption Enumeration
http://msdn.microsoft.com/en-us/library/ms143448.aspx
2. Directory.GetDirectories Method
http://msdn.microsoft.com/en-us/library/c1sez4sc(v=VS.80).aspx
3. HierarchicalDataTemplate Class
http://msdn.microsoft.com/en-us/library/system.windows.hierarchicaldatatemplate.aspx
源代码下载
WPF 4 目录树型显示的更多相关文章
- java实现第八届蓝桥杯树型显示
树型显示 题目描述 对于分类结构可以用树形来形象地表示.比如:文件系统就是典型的例子. 树中的结点具有父子关系.我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关 ...
- 20-Ubuntu-文件和目录命令-查看目录树型结构-tree
tree 以树状图列出当前目录下的文件目录结构 选项 含义 -d 只显示当前目录的子目录树型结构 显示当前目录的子目录和文件树型结构 例: 1.查看文档目录下的子目录和文件树型结构 2.查看文档目 ...
- 按树型显示BOM的结构
在制造企业中,生产的每一个产品都由一道或多道工序组成,在组成成品之前,每一道工序经由物料--物料组成半成品,或物料--半成品组成新的半成品,亦或由半成品--半成品组成新的半成品.复杂的成品经由多道工序 ...
- RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法
RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法 手风琴风格在Web应用非常的普遍,越来越多的Web应用都是采用这种方式来体现各个功能模块,传统的手风琴风格只支持 ...
- 显示目录树命令tree
-a:显示所有文件,包括隐藏文件 -d:只显示目录 -f:显示完整的文件名,包含路径 -L:显示目录树的深度 [root@rusky /]# tree -L -a -f /home /home |-- ...
- sublime text3怎么让左侧显示目录树
在前端开发中(包括Node.js开发),经常会使用sublime text,但之前一直不知道别人是怎么让左侧显示目录树,故特意在此记录一下. View ->Side Bar ->Show ...
- 设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。
设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件. 我实现的功能是提供父目录(兄弟目录),输入文件名,创建树型目录结构,文本文件不可以再有子目录 ...
- VC中实现带有背景位图的树型控件
当前许多应用程序都在使用树型控件时为其添加了背景位图,增强的控件的魅力,然而对于Visual C++编程爱好者来说,使用Visual C++MFC提供的树型控件(CTreeCtrl)本身就是一个难点, ...
- linux学习心得之目录树开端与/etc(图文)
linux学习心得之目录树开端与/etc(图文) linux中“一切皆文件”,学习linux一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...
随机推荐
- AOP概述:
AOP可以在不修改源代码的情况下,对程序进行增强. AOP面向切面进行编程,Spring将AOP引入到框架中,但是也需要遵守AOP联盟的规范. 通过预编译的方式和运行期动态代理实现程序功能的同意维护的 ...
- android 发送http请求
好久没写博客了,由于公司要做android,笔者也是第一次接触. 这是在项目中遇到一个比較麻烦的问题.记录下来备忘(本人刚接触.有不正确的地方请不吝赐教). 发送请求的代码: package com. ...
- Linux网络编程——原始套接字实例:MAC 头部报文分析
通过<Linux网络编程——原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 M ...
- 基于 Android NDK 的学习之旅-----HelloWorld
Hello World作为所有编程语言的起始阶段,占据着无法改变的地位,所有中/英/法/德/美……版本的编程教材中,hello world总是作为第一个TEST记录于书本之中,所有的编程第一步就在于此 ...
- 【u209】轰炸
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小y是苏联的总书记. 苏联有n个城市,某些城市之间修筑了公路.任意两个城市都可以通过公路直接或者间接到 ...
- jQuery+ localStorage 实现一个简易的计时器
原型 图片发自简书App 需求1.关闭浏览器时时间继续运行2.刷新时保持当前状态3.结束时间保存在客户端 <div class="wrapper"> <div c ...
- ScrollView嵌套ListView问题
ScrollView嵌套ListView问题 导致Listview 第一主角 它是 Listview 的item 显示器的数量是不完全. 这是因为item 中间 Textview 话是太多的问题 一 ...
- 基于webRTC技术 音频和视频,IM解
由于原来的文章 http://blog.csdn.net/voipmaker 转载注明出处. 基于WebRTC技术可实现点对点音视频.即时通信.视频会议.最新的系统组件包含: TeleICE NAT ...
- 【19.27%】【codeforces 618D】Hamiltonian Spanning Tree
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- jquery 源码学习(二)
在网上找到一篇广为流传的文章<常用正则表达式>,逐一分析,不足地方进行补充和纠正 作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail ...