• 首发公众号:Dotnet9

  • 作者:沙漠之尽头的狼

  • 日期:202-11-27

一、本文开始之前

上传文件时,一般是提供一个上传按钮,点击上传,弹出文件(或者目录选择对话框),选择文件(或者目录)后,从对话框对象中取得文件路径后,再进行上传操作。

对话框选择文件

选择对话框代码如下:

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择Exe文件";
openFileDialog.Filter = "exe文件|*.exe";
openFileDialog.FileName = string.Empty;
openFileDialog.FilterIndex = 1;
openFileDialog.Multiselect = false;
openFileDialog.RestoreDirectory = true;
openFileDialog.DefaultExt = "exe";
if (openFileDialog.ShowDialog() == false)
{return;
}
string txtFile = openFileDialog.FileName;

但一般来说,对用户体验最好的,应该是直接鼠标拖拽文件了:

百度网盘拖拽上传文件

下面简单说说WPF中文件拖拽的实现方式。

二、WPF中怎样拖拽文件呢?

其实很简单,只要拖拽接受控件(或容器)注册这两个事件即可:DragEnterDrop

先看看我的实现效果:

拖拽文件进QuickApp中

Xaml中注册事件

注册事件:

<Grid  MouseMove="Grid_MouseMove" AllowDrop="True" Drop="Grid_Drop" DragEnter="Grid_DragEnter">

事件处理方法:

  1. Grid_DragEnter处理方法

private void Grid_DragEnter(object sender, DragEventArgs e)
{if (e.Data.GetDataPresent(DataFormats.FileDrop)){e.Effects = DragDropEffects.Link;}else{e.Effects = DragDropEffects.None;}
}

DragDropEffects.Link:处理拖拽文件操作

  1. Grid_Drop处理方法

这是处理实际拖拽操作的方法,得到拖拽的文件路径(如果是操作系统文件快捷方式(扩展名为lnk),则需要使用com组件(不是本文讲解重点,具体看本文开源项目)取得实际文件路径)后,即可处理后续操作(比如文件上传)。

private void Grid_Drop(object sender, DragEventArgs e)
{try{var fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();MenuItemInfo menuItem = new MenuItemInfo() { FilePath = fileName };// 快捷方式需要获取目标文件路径if (fileName.ToLower().EndsWith("lnk")){WshShell shell = new WshShell();IWshShortcut wshShortcut = (IWshShortcut)shell.CreateShortcut(fileName);menuItem.FilePath = wshShortcut.TargetPath;}ImageSource imageSource = SystemIcon.GetImageSource(true, menuItem.FilePath);System.IO.FileInfo file = new System.IO.FileInfo(fileName);if (string.IsNullOrWhiteSpace(file.Extension)){menuItem.Name = file.Name;}else{menuItem.Name = file.Name.Substring(0, file.Name.Length - file.Extension.Length);}menuItem.Type = MenuItemType.Exe;if (ConfigHelper.AddNewMenuItem(menuItem)){AddNewMenuItem(menuItem);}}catch (Exception ex){MessageBox.Show(ex.Message);}
}

三、本文Over

功能很简单,不求精深,会用就行。

C# WPF:把文件给我拖进来!!!相关推荐

  1. 如何快速取消所有文件夹共享?进来瞧瞧

    原文:如何快速取消所有文件夹共享?进来瞧瞧 快速取消所有文件夹共享: 把文件夹共享给别人但忘记取消,想取消共享但找不到那个文件夹了,怎么办? 双击这个工具,可清除所有共享. strComputer = ...

  2. WPFの操作文件浏览框几种方式

    WPFの操作文件浏览框几种方式 原文:WPFの操作文件浏览框几种方式 方式1: 使用win32控件OpenFileDialog Microsoft.Win32.OpenFileDialog ofd = ...

  3. WPF 获得文件夹路径 FolderBrowserDialog

    WPF 获得文件夹路径可用FolderBrowserDialog类, 添加System.Windows.Forms引用, 并引用命名空间using System.Windows.Forms; priv ...

  4. WPF 从文件加载字体

    原文:WPF 从文件加载字体 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客. ...

  5. 解决打开文件、文件夹、拖拽复制删除时鼠标卡顿

    1.问题描述 打开文件.文件夹.拖拽文件复制删除时,鼠标总会卡一两秒,在需要处理大量文件时非常影响工作. 2.解决过程 通过任务管理器发现windows资源管理器在进行上述操作时cpu占用会迅速拉高, ...

  6. Win10不能直接拖文件/Foxmail不能拖文件解决办法

    在桌面新建一个文本文档 打开文本文档复制下面的文字然后保存. Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Mic ...

  7. js使用input上传文件夹、拖拽上传文件夹并将文件夹结构展示为树形结构

    一.实现效果 左侧区域支持选择一个系统中的文件夹,或者将文件夹拖拽到这个区域进行上传,右侧区域可以将文件夹的结构展示为树形结构. 二.代码实现 由于需要使用树形插件zTree,这个插件是依赖于jque ...

  8. idea项目中有jar包,java文件却引不进来

    最近写代码又遇到了神奇的错误== 导入项目后报这个错: 但是项目中明明有这个jar包啊=.= 为啥引不进来...挠头 后来灵机一动,手动导一个试试? 在根目录下建一个lib文件夹,存放jar包 把ja ...

  9. 使用WPF开发文件加密解密软件

    应用场景 在很多情况下,我们希望对一些比较私密的文件进行加密,当自己需要查看的时候,再解密出来.因此,今天与大家分享一款自己以前用WPF开发的文件加密解密软件. 准备工作 开发环境:VisualStu ...

最新文章

  1. 科普:不要对移动机器人有误解
  2. 基于DirectX的游戏引擎-Xworld
  3. Jquery each() 如何操作动态添加的DOM元素
  4. 二叉搜索树的插入与删除图解
  5. django2与ajax,Python-Django-Ajax进阶2
  6. Mysql数据库及帐号的权限查询
  7. java api练习_Java接口练习
  8. 当FORM的ENCTYPE=quot;multipart/form-dataquot; 时request.getParameter()获取不到
  9. 微软高层人士变动!张祺晋升为微软公司全球资深副总裁
  10. (非本校)湖南工业大学个人选拔赛第一场 解题报告
  11. Window下利用命令行提交代码到GitHub
  12. html java对象_Java遇见HTML——JSP篇之JSP内置对象(下)
  13. Excel文件下载From Linux
  14. 290万人考研:所有的不平凡,从不认命开始
  15. spectral-cluster聚类算法详解
  16. 请开启微信或者手机定位服务器,微信在哪里设置定位(微信开启定位功能设置)...
  17. FDE之默认密码开机流程
  18. Unity中的3D数学—02向量与矩阵
  19. 创建或打开android模拟器时遇到的问题,以及打开后遇到的Failed to install FragmentTest.apk on device 'emulator-5554': timeout
  20. 解决Tmux提示的size x*x from a smaller client窗口缩放问题

热门文章

  1. 《解密小米之互联网下的商业奇迹》
  2. JIL 编译与 AOT 编译
  3. HDU 5238 Calculator 线段树 中国剩余定理
  4. unity的依赖注入
  5. C# 读写ACCESS的OLE对象,演示图片与长文件的读写
  6. Facebook 如何管理150亿张照片
  7. Teams App抽奖机器人 - 基础架构
  8. airdroid黑屏_如何使用AirDroid从PC控制Android设备
  9. hdu 1556 Color the ball 线段树 区间更新
  10. 部门树形结构,使用Treeview控件显示部门