原文:WPF 4 目录树型显示

     本篇将通过WPF4 制作简单的目录树型结构显示实例,完成本篇内容我们将作出下图所示的应用程序。

     从图中我们可以看到程序主要分为两部分:左边显示本地驱动器的目录树型列表,右边显示被选中目录中的文件信息。首先,创建一个DirectoryRecord 类,通过两个泛型接口Files、Directories 分别获取文件信息和目录信息。其中使用Linq 获取目录信息时,我们只需要使用SearchOption.TopDirectoryOnly 读取当前目录文件夹信息即可,而不需使用SearchOption.AllDirectories 获取包含子文件在内的所有文件夹信息。

  1. class DirectoryRecord
  2. {
  3. public DirectoryInfo Info { get; set; }
  4.  
  5. public IEnumerable<FileInfo> Files
  6. {
  7. get
  8. {
  9. return Info.GetFiles();
  10. }
  11. }
  12.  
  13. public IEnumerable<DirectoryRecord> Directories
  14. {
  15. get
  16. {
  17. return from di in Info.GetDirectories("*", SearchOption.TopDirectoryOnly)
  18. select new DirectoryRecord { Info = di };
  19. }
  20. }
  21. }

     在<Gird>中我们加入<TreeView> 和<DataGrid> 分别显示目录树和文件信息。在TreeView 中通过HierarchicalDataTemplate 模板显示出目录树型层级结构,DataGrid 则通过绑定TreeView 中选择的目录而显示相应文件信息。

  1. <TreeView x:Name="directoryTreeView" Width="300" Height="387" Margin="12,12,0,0"
  2. VerticalAlignment="Top" HorizontalAlignment="Left">
  3. <TreeView.Resources>
  4. <HierarchicalDataTemplate DataType="{x:Type local:DirectoryRecord}"
  5. ItemsSource="{Binding Directories}" >
  6. <StackPanel Orientation="Horizontal">
  7. <Image Source="Images/folder.png" Width="16" Height="16"/>
  8. <TextBlock Text="{Binding Info.Name}"/>
  9. </StackPanel>
  10. </HierarchicalDataTemplate>
  11. </TreeView.Resources>
  12. </TreeView>
  13.  
  14. <DataGrid x:Name="fileInfo" Width="548" Height="387" Margin="318,12,0,0"
  15. VerticalAlignment="Top" HorizontalAlignment="Left"
  16. GridLinesVisibility="Vertical" VerticalGridLinesBrush="Gray"
  17. ItemsSource="{Binding ElementName=directoryTreeView, Path=SelectedItem.Files}"/>

     最后,通过Directory_Load 方法将本地磁盘目录加载到TreeView 中,并通过定义DataGridAutoGeneratingColumnEventArgs 事件fileInfoColumn_Load 在DataGrid 中过滤出想要参考的文件信息(Name、Length、FullName、IsReadOnly、LastWriteTime)。

  1. using System.Collections.ObjectModel;
  2. using System.IO;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Collections.Generic;
  6.  
  7. namespace WpfDirectoryTreeView
  8. {
  9. /// <summary>
  10. /// Interaction logic for MainWindow.xaml
  11. /// </summary>
  12. public partial class MainWindow : Window
  13. {
  14. public MainWindow()
  15. {
  16. InitializeComponent();
  17. Directory_Load();
  18. fileInfo.AutoGeneratingColumn += fileInfoColumn_Load;
  19. }
  20.  
  21. private void Directory_Load()
  22. {
  23. var directory = new ObservableCollection<DirectoryRecord>();
  24.  
  25. foreach (var drive in DriveInfo.GetDrives())
  26. {
  27. directory.Add(
  28. new DirectoryRecord
  29. {
  30. Info = new DirectoryInfo(drive.RootDirectory.FullName)
  31. }
  32. );
  33. }
  34.  
  35. directoryTreeView.ItemsSource = directory;
  36. }
  37.  
  38. private void fileInfoColumn_Load(object sender, DataGridAutoGeneratingColumnEventArgs e)
  39. {
  40. List<string> requiredProperties = new List<string>
  41. {
  42. "Name", "Length", "FullName", "IsReadOnly", "LastWriteTime"
  43. };
  44.  
  45. if (!requiredProperties.Contains(e.PropertyName))
  46. {
  47. e.Cancel = true;
  48. }
  49. else
  50. {
  51. e.Column.Header = e.Column.Header.ToString();
  52. }
  53. }
  54. }
  55. }

参考资料

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 目录树型显示的更多相关文章

  1. java实现第八届蓝桥杯树型显示

    树型显示 题目描述 对于分类结构可以用树形来形象地表示.比如:文件系统就是典型的例子. 树中的结点具有父子关系.我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关 ...

  2. 20-Ubuntu-文件和目录命令-查看目录树型结构-tree

    tree 以树状图列出当前目录下的文件目录结构 选项 含义 -d 只显示当前目录的子目录树型结构   显示当前目录的子目录和文件树型结构 例: 1.查看文档目录下的子目录和文件树型结构 2.查看文档目 ...

  3. 按树型显示BOM的结构

    在制造企业中,生产的每一个产品都由一道或多道工序组成,在组成成品之前,每一道工序经由物料--物料组成半成品,或物料--半成品组成新的半成品,亦或由半成品--半成品组成新的半成品.复杂的成品经由多道工序 ...

  4. RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法

    RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法 手风琴风格在Web应用非常的普遍,越来越多的Web应用都是采用这种方式来体现各个功能模块,传统的手风琴风格只支持 ...

  5. 显示目录树命令tree

    -a:显示所有文件,包括隐藏文件 -d:只显示目录 -f:显示完整的文件名,包含路径 -L:显示目录树的深度 [root@rusky /]# tree -L -a -f /home /home |-- ...

  6. sublime text3怎么让左侧显示目录树

    在前端开发中(包括Node.js开发),经常会使用sublime text,但之前一直不知道别人是怎么让左侧显示目录树,故特意在此记录一下. View ->Side Bar ->Show ...

  7. 设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。

    设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件. 我实现的功能是提供父目录(兄弟目录),输入文件名,创建树型目录结构,文本文件不可以再有子目录 ...

  8. VC中实现带有背景位图的树型控件

    当前许多应用程序都在使用树型控件时为其添加了背景位图,增强的控件的魅力,然而对于Visual C++编程爱好者来说,使用Visual C++MFC提供的树型控件(CTreeCtrl)本身就是一个难点, ...

  9. linux学习心得之目录树开端与/etc(图文)

    linux学习心得之目录树开端与/etc(图文) linux中“一切皆文件”,学习linux一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...

随机推荐

  1. AOP概述:

    AOP可以在不修改源代码的情况下,对程序进行增强. AOP面向切面进行编程,Spring将AOP引入到框架中,但是也需要遵守AOP联盟的规范. 通过预编译的方式和运行期动态代理实现程序功能的同意维护的 ...

  2. android 发送http请求

    好久没写博客了,由于公司要做android,笔者也是第一次接触. 这是在项目中遇到一个比較麻烦的问题.记录下来备忘(本人刚接触.有不正确的地方请不吝赐教). 发送请求的代码: package com. ...

  3. Linux网络编程——原始套接字实例:MAC 头部报文分析

    通过<Linux网络编程——原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 M ...

  4. 基于 Android NDK 的学习之旅-----HelloWorld

    Hello World作为所有编程语言的起始阶段,占据着无法改变的地位,所有中/英/法/德/美……版本的编程教材中,hello world总是作为第一个TEST记录于书本之中,所有的编程第一步就在于此 ...

  5. 【u209】轰炸

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小y是苏联的总书记. 苏联有n个城市,某些城市之间修筑了公路.任意两个城市都可以通过公路直接或者间接到 ...

  6. jQuery+ localStorage 实现一个简易的计时器

    原型 图片发自简书App 需求1.关闭浏览器时时间继续运行2.刷新时保持当前状态3.结束时间保存在客户端 <div class="wrapper"> <div c ...

  7. ScrollView嵌套ListView问题

    ScrollView嵌套ListView问题 导致Listview  第一主角 它是 Listview 的item 显示器的数量是不完全. 这是因为item 中间 Textview 话是太多的问题 一 ...

  8. 基于webRTC技术 音频和视频,IM解

    由于原来的文章 http://blog.csdn.net/voipmaker  转载注明出处. 基于WebRTC技术可实现点对点音视频.即时通信.视频会议.最新的系统组件包含: TeleICE NAT ...

  9. 【19.27%】【codeforces 618D】Hamiltonian Spanning Tree

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  10. jquery 源码学习(二)

    在网上找到一篇广为流传的文章<常用正则表达式>,逐一分析,不足地方进行补充和纠正   作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail ...