single.php

C# WinUI 3アプリでフォームへのドラッグアンドドロップイベントを検出する手順

C# WinUI 3アプリを作っていく途中で、躓いた部分を備忘録的に投稿します。今回はフォームにファイルをドラッグアンドドロップするイベント取得について

ドラッグアンドドロップ関連のイベントを実装

C#で、WinUI 3プロジェクトの場合は、インターフェイス部分がXAML形式で構成されているので、タグに属性を追加する感じでイベントを追加していきます。

ドロップターゲットのタグ部分に追加します。

今回は画像(Image)タグに次のように、AllowDrop、DragOver、Dropをそれぞれ、次の様に追加しました。

<Image x:Name="myimage" Stretch="Uniform" AllowDrop="True" DragOver="Grid_DragOver" Drop="Grid_Drop" />

AllowDropは、ドロップの許可をします。残りの2つはマウスポインターがドラッグ状態で入ってきた際と、マウスのボタンが離されてドロップ状態になった際のイベントです。

ドラックアンドドロップ処理を追加

DragOverとDropのそれぞれは、csファイルに処理を行うプロシージャを追加していきます。

まずはDragOverイベント。マウスポインターの形状を変更します。

private void Grid_DragOver(object sender, DragEventArgs e)
{
  e.AcceptedOperation = DataPackageOperation.Copy;
}

続けて、ファイルをドロップされた際に、ファイル名を取得して処理を行います。

private async void Grid_Drop(object sender, DragEventArgs e)
{
  if (e.DataView.Contains(StandardDataFormats.StorageItems))
  {
    var items = await e.DataView.GetStorageItemsAsync();
    if (items.Count == 1)
    {
      var storageFile = items[0] as StorageFile;

      string filePath = storageFile.Path.ToString();
    }
  }
}

private 宣言の後に、非同期の async キーワードを利用するのがポイントです。

まとめ

今回は短い記事ですが、WinUI 3 アプリでドラッグアンドドロップでファイルの入力を受け付ける際のイベントを取得する方法を書きました。

WinFormsの時代とは違ってXAMLのコントロールタグにイベントを追加して、CSファイルに実装部分を書く手順が少し面倒です。

C#のWinUI 3アプリでドラッグアンドドロップでファイルの入力イベントを取得したい場合の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です