C# WPF:這次將檔案拖出去!

C# WPF:這次將檔案拖出去!

將檔案從WPF表單中拖出

最後更新 2020/12/3 下午1:45
沙漠尽头的狼
預計閱讀 2 分鐘
分類
WPF
標籤
.NET C# WPF 檔案拖拽

回顧上篇文章:C# WPF:把文件給我拖進來!!!

拖曳檔案進QuickApp中

本文完成對應的下文:《C# WPF:這次把文件拖出去!》

提前看效果吧:

拖出檔案

上面效果的程式碼很少,xaml 中只註冊事件PreviewMouseLeftButtonDown即可:

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

事件處理程式碼如下:

//處理檔案拖曳操作
private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // 目前每個選單由一個Image和TextBlock組成,所以判斷拖曳的是否是一個Image控制項,其他目標控制項的拖曳不處理
    var img = e.OriginalSource as Image;
    if (img == null || img.Tag == null)
    {
        return;
    }
    var menuInfo = img.Tag as MenuItemInfo;
    if(menuInfo==null)
    {
        return;
    }

    #region 拖曳程式碼

    ListView lv = new ListView();
    string dataFormat = DataFormats.FileDrop;
    DataObject dataObject = new DataObject(dataFormat, new string[] { menuInfo.FilePath});
    DragDropEffects dde = DragDrop.DoDragDrop(lv, dataObject, DragDropEffects.Copy);

    #endregion
}

關鍵的是後面的程式碼(拖曳程式碼原始碼倉庫路徑),需要將原始檔案路徑透過DragDrop.DoDragDrop方法傳入,作業系統幫我們處理了檔案複製操作。

上面的操作還是太簡單,相當於只是對檔案在作業系統層面進行了複製,如果要完成類似百度網盤的拖曳下載功能(如下圖):

百度網盤拖曳下載檔案

上面的功能,程式其實要做不少事情,需要監聽拖放的路徑,得到拖放路徑後,就可以透過原始檔案網路路徑進行下載了,建議閱讀這篇文章,參考拖放下載檔案操作:WPF 拖曳檔案(拖入拖出),監控拖曳到哪個位置,類似百度網盤拖曳

另外,這篇文章對 WPF 的拖放寫得也不錯,建議閱讀:WPF 之 DragDrop 拖放實例

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2025/1/26

WPF 藉助自訂 XML 檔案實現國際化

本文詳細介紹了在WPF程式中使用自訂XML檔案實現國際化的方法,包括安裝必備NuGet套件、動態獲取語言清單、動態切換語言、在程式碼和XAML介面中使用翻譯字串等內容,同時提供了原始碼連結,幫助開發者輕鬆實現WPF應用程式的國際化。

繼續閱讀