WPF显示磁盘文件列表

运行如下;

 xaml代码;

<Window x:Class="tree1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:tree1"
        mc:Ignorable="d"
        Loaded="Window_Loaded"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView x:Name="FolderView">
            <TreeView.Resources>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <!--磁盘显示的图标-->
                                    <Image Margin="3" Width="20" Source="Images/drive.png"/>
                                    <!--功能绑定-->
                                    <TextBlock VerticalAlignment="Center" Text="{Binding}"/>
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TreeView.Resources>
        </TreeView>
    </Grid>
</Window>

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
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        #region On Loaded
        /// <summary>
        /// 绑定驱动器号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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<String>();


            // 尝试从文件夹中获取目录 // 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<String>();


            // 尝试从文件夹中获取文件 // 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

        /// <summary>
        /// 从完整路径中查找文件或文件夹名称
        /// </summary>
        /// <param name="path">完整路径</param>
        /// <returns></returns>
        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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是微软开发的一种用于创建客户端应用程序的框架。要显示视频文件列表,我们可以使用WPF组件和相关的数据绑定。以下是一个简单的实现示例: 首先,我们需要创建一个WPF窗口,包含一个列表控件和一个按钮。列表控件用于显示视频文件列表,按钮用于触发加载列表的操作。 接下来,我们需要在代码中进行相关设置。我们可以使用C#编程语言来处理列表的数据绑定和加载操作。 在窗口的代码文件中,首先定义一个ObservableCollection类的实例。ObservableCollection是一种可以自动通知更改的集合,常适合用于显示数据。然后,在窗口的构造函数中,初始化这个集合。 接下来,我们需要编写一个方法来加载视频文件列表。在这个方法中,我们可以使用C#的文件操作功能来读取文件夹中的视频文件,并将它们添加到ObservableCollection中。具体地,我们使用System.IO.Directory类的GetFiles方法来获取文件夹中的视频文件的路径,然后使用ObservableCollection的Add方法将路径添加到集合中。 最后,我们将加载列表的操作与按钮的点击事件关联起来。当按钮被点击时,调用加载视频文件列表的方法,然后将数据绑定到列表控件中。 通过这样的实现,我们就可以在WPF窗口中显示视频文件列表了。当文件夹中的视频文件发生更改时,列表也会自动更新。这种方式可以提供一个简单、可扩展和易于使用的方式来显示视频文件列表,方便用户查看和选择需要播放的视频。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值