C# WPF:今回はファイルをドラッグアウト!

C# WPF:今回はファイルをドラッグアウト!

WPFフォームからファイルをドラッグアウトする

最終更新 2020/12/03 13: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メソッドに元のファイルパスを渡す必要があり、OSがファイルのコピー操作を処理してくれます。

上記の操作はあまりにも単純で、OSレベルでのファイルコピーに過ぎません。百度网盤のようなドラッグ&ドロップによるダウンロード機能(下図参照)を実現するにはどうすればよいでしょうか。

百度网盘拖拽下载文件

この機能を実現するには、プログラムで多くの処理が必要です。ドロップされたパスを監視し、そのパスを取得したら元のファイルのネットワークパスを使ってダウンロードを行います。こちらの記事を参考にすることをお勧めします:WPF 拖拽文件(拖入拖出),监控拖拽到哪个位置,类似百度网盘拖拽

また、WPFのドラッグ&ドロップについて詳しく解説しているこちらの記事もお勧めです:WPF 之 DragDrop 拖放实例

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/01/26

WPF カスタムXMLファイルによる国際化

この記事では、WPFプログラムでカスタムXMLファイルを使用して国際化を実現する方法について詳しく説明します。必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードおよびXAMLインターフェースでの翻訳文字列の使用などを含み、ソースコードのリンクも提供し、開発者がWPFアプリケーションの国際化を簡単に実装できるように支援します。

続きを読む
同じカテゴリ / 同じタグ 2024/01/25

C# WPFにおけるFluentValidationの応用

この記事では、C# WPFプロジェクトでFluentValidationを使用してプロパティ検証を行う方法と、MVVMパターンを通じてこの機能を実装する方法について詳しく説明します。

続きを読む