C# WPF:快把文件從桌面拖進個人窗體來!

  • 首發公衆號:Dotnet9
  • 做者:沙漠之盡頭的狼
  • 日期:202-11-27

1、本文開始以前

上傳文件時,通常是提供一個上傳按鈕,點擊上傳,彈出文件(或者目錄選擇對話框),選擇文件(或者目錄)後,從對話框對象中取得文件路徑後,再進行上傳操做。html

對話框選擇文件

選擇對話框代碼以下:git

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;

但通常來講,對用戶體驗最好的,應該是直接鼠標拖拽文件了:github

百度網盤拖拽上傳文件

下面簡單說說WPF中文件拖拽的實現方式。shell

2、WPF中怎樣拖拽文件呢?

其實很簡單,只要拖拽接受控件(或容器)註冊這兩個事件便可:DragEnterDrop微信

先看看個人實現效果:ui

拖拽文件進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:處理拖拽文件操做code

  1. Grid_Drop處理方法

這是處理實際拖拽操做的方法,獲得拖拽的文件路徑(若是是操做系統文件快捷方式(擴展名爲lnk),則須要使用com組件(不是本文講解重點,具體看本文開源項目)取得實際文件路徑)後,便可處理後續操做(好比文件上傳)。orm

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);
    }
}

3、本文Over

功能很簡單,不求精深,會用就行。htm

時間如流水,只能流去不流回。

  • 首發公衆號:Dotnet9
  • 做者:沙漠之盡頭的狼
  • 日期:202-11-27

微信公衆號:Dotnet9

相關文章
相關標籤/搜索