WPF显示磁盘文件列表

运行如下;

WPF显示磁盘文件列表_第1张图片

 xaml代码;


    
        
            
                
            
        
    

cs代码;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;

namespace tree1
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        #region On Loaded
        /// 
        /// 绑定驱动器号
        /// 
        /// 
        /// 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // 获取电脑上的每个逻辑驱动器
            foreach (var drive in Directory.GetLogicalDrives())
            {
                // 为此创建一个新项目
                var item = new TreeViewItem()
                {
                    // 设置标题
                    Header = drive,

                    // 完整路径
                    Tag = drive
                };

               

                // 添加一个虚拟磁盘
                item.Items.Add(null);

                // 监听正在扩展的文件
                item.Expanded += Folder_Expanded;

                // 将其添加到主树视图
                FolderView.Items.Add(item);
            }
        }
        #endregion

        #region Folder Expanded
        private void Folder_Expanded(object sender, RoutedEventArgs e)
        {
            #region Initial Checks
            var item = (TreeViewItem)sender;

            // 如果项目仅包含伪数据,就返回
            if (item.Items.Count != 1 || item.Items[0] != null)
                return;

            // 清除数据
            item.Items.Clear();

            // 获取完整路径
            var fullPath = (String)item.Tag;

            #endregion

            #region Get Folders

            // 为目录创建一个空白列表
            var directories = new List();


            // 尝试从文件夹中获取目录 // try异常处理,忽略出现的任何问题          
            try
            {
                var dirs = Directory.GetDirectories(fullPath);
                {
                    if (dirs.Length > 0)
                        directories.AddRange(dirs);
                }
            }
            catch { }

            // 为目录做迭代,添加目录
            directories.ForEach(directoryPath =>
            {
                // 创建目录项
                var subItem = new TreeViewItem()
                {
                    // 将标题设置为文件夹名称
                    Header = GetFileFolderName(directoryPath),
                    // 标记为完整路径
                    Tag = directoryPath
                };

                // 添加虚拟项目,以便我们可以扩展文件夹
                subItem.Items.Add(null);
                // 处理扩展
                subItem.Expanded += Folder_Expanded;
                // 将此项目添加到父项
                item.Items.Add(subItem);

            });
            #endregion

            #region Get Files
            // 为目录创建一个空白文件
            var Files = new List();


            // 尝试从文件夹中获取文件 // try异常处理,忽略出现的任何问题          
            try
            {
                var fs = Directory.GetFiles(fullPath);
                {
                    if (fs.Length > 0)
                        Files.AddRange(fs);
                }
            }
            catch { }

            // 为目录做迭代,添加文件
            Files.ForEach(filePath =>
            {
                // 创建文件
                var subItem = new TreeViewItem()
                {
                    // 将标题设置为文件名称
                    Header = GetFileFolderName(filePath),
                    // 标记为完整路径
                    Tag = filePath
                };

                // 将此项目添加到父项
                item.Items.Add(subItem);                
            });

            #endregion
        }

        #endregion

        /// 
        /// 从完整路径中查找文件或文件夹名称
        /// 
        /// 完整路径
        /// 
        public static string GetFileFolderName(string path)
        {
            // 如果没有路径,则返回空
            if (string.IsNullOrEmpty(path))
                return string.Empty;

            // 使所有斜杠成反斜杠
            var normalizedPath = path.Replace('/', '\\');

            // 找到最后一个反斜杠就是路径
            var lastIndex = normalizedPath.LastIndexOf('\\');

            // 如果找不到反斜线,则返回路径本身
            if (lastIndex <= 0)
                return path;

            // 最后一个反斜杠后返回名称
            return path.Substring(lastIndex + 1);
        }

    }
}

原代码来自此处; 如何在C#-WPF窗口中, 添加 我的电脑 磁盘等路径 并显示相应的文件_wpf显示本地盘符_comres的博客-CSDN博客

下面大体看一下代码;

    主要是在xaml中使用一个TreeView控件;在TreeView中包含资源;资源中包含Style;在Style指定绑定的目标类型TargetType是TreeViewItem;这样cs代码中给item赋值以后,FolderView.Items.Add(item) ,以及 item.Items.Add(subItem),就会把要显示的内容放到TreeView控件;

wpf中,

Setters是Style类的一个重要属性。
Setter的作用是给System.Windows.Style指定的TargetType类型或者自身的TargetName指定的对象设置属性值。

Binding是WPF 应用程序中的一种机制,它为应用程序提供了一种简单易用的方式来显示数据并与之交互。它允许数据在 UI 和业务模型之间流动。绑定完成后对业务模型中的数据所做的任何修改都会自动反映到 UI,反之亦然。绑定可以是单向的或双向的。数据绑定的源可以是普通的 .NET 属性或 Dependency 属性,但目标属性必须是Dependency属性。

在CS代码中使用Directory.GetLogicalDrives(),Directory.GetDirectories(fullPath),Directory.GetFiles(fullPath)几个System.IO的函数获取文件夹和文件的名称,然后放入item;

你可能感兴趣的:(.Net,wpf)