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一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...
随机推荐
- ServerSocketChannel API用法
java.nio.channels 类 ServerSocketChannel java.lang.Object java.nio.channels.spi.AbstractInterruptible ...
- DI:依赖注入详解
DI(依赖注入) 依赖注入的理解: 一般写程序的时候service层都需要用到dao层,所以一般都是在service层里面new dao ,而现在利用依赖注入的方式,直接把dao给了service层 ...
- javaScript_with用法
with语句用途 暂时改变作用域链.简化代码. 语法结构 with(object){ //其他语句 } 例1 with(person){ name= "zhang"; addres ...
- 【59.49%】【codeforces 554B】Ohana Cleans Up
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 如何让eclipse输出结果的console栏自动换行?
在console栏内容上面,鼠标右键有个word-wrap,就行了
- ArcEngine 图层标注 (根据字段、角度)
转自chanyinhelv原文 ArcEngine 图层标注 (根据字段.角度) 今天做了一个用AE来控制图层是否显示标注,以及已哪一个字段作为标注的字段,以哪一个字段作为标注的角度,现将代码写下来, ...
- SPOJ4491. Primes in GCD Table(gcd(a,b)=d素数,(1<=a<=n,1<=b<=m))加强版
SPOJ4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the result ...
- Android 设置alpha值来制作透明与渐变效果的实例
Android系统支持的颜色是由4个值组成的,前3个为RGB,也就是我们常说的三原色(红.绿.蓝),最后一个值是A,也就是Alpha.这4个值都在0~255之间.颜色值越小,表示该颜色越淡,颜色值越大 ...
- 为什么未来是全栈project师的世界?
谨以此文献给每个为成为优秀全栈project师奋斗的人. 节选自<Growth: 全栈增长project师指南> 技术在过去的几十年里进步非常快,也将在未来的几十年里发展得更快. 今天技术 ...
- ScrollView嵌套ListView问题
ScrollView嵌套ListView问题 导致Listview 第一主角 它是 Listview 的item 显示器的数量是不完全. 这是因为item 中间 Textview 话是太多的问题 一 ...