最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • C# WPF:从窗体外拖文件到当前程序

    正文概述 掘金(沙漠尽头的狼(dotnet9.com))   2020-11-29   585

    一、本文开始之前

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

    C# WPF:从窗体外拖文件到当前程序

    对话框选择文件

    选择对话框代码如下:

    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;
    

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

    C# WPF:从窗体外拖文件到当前程序

    百度网盘拖拽上传文件

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

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

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

    先看看我的实现效果:

    C# WPF:从窗体外拖文件到当前程序

    拖拽文件进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:从窗体外拖文件到当前程序

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元