天天看點

WPF 4 目錄樹型顯示參考資料源代碼下載下傳

原文: WPF 4 目錄樹型顯示      本篇将通過WPF4 制作簡單的目錄樹型結構顯示執行個體,完成本篇内容我們将作出下圖所示的應用程式。

WPF 4 目錄樹型顯示參考資料源代碼下載下傳
     從圖中我們可以看到程式主要分為兩部分:左邊顯示本地驅動器的目錄樹型清單,右邊顯示被選中目錄中的檔案資訊。首先,建立一個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 };
        }
    }
}      
http://11011.net/software/vspaste

     在<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}"/>
      
http://11011.net/software/vspaste

     最後,通過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();
            }
        }
    }
}      
http://11011.net/software/vspaste

參考資料

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

源代碼下載下傳

繼續閱讀