dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

Windows App SDK(WinUI3)でドラッグアンドドロップを実装する際のメモ

公式ドキュメントが若干不親切

ドラッグ アンド ドロップ - Windows apps | Microsoft Learn

ポイントは以下

結果的にドラッグアンドドロップを受けるコントロールには、少なくとも次の4つのプロパティが設定されているはず。

AllowDrop="True" CanDrag="True" DragOver="{DragOverイベントハンドラのメソッド名}" Drop="{Dropイベントハンドラのメソッド名}"

DragOverイベントハンドラを実装する

ドラッグ中にカーソルが変化して、ドロップできることをユーザに知らせる。 例えば、以下のように実装すると「コピー」できることを知らせるアイコンになる。

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

Dropイベントハンドラを実装する

ドロップされた際のイベントハンドラで、複数のファイルのドロップにも対応できる。 以下のコードはドロップされたものの種類をデバッグウィンドウに吐き出す。 このコードでは詳しく中身を見ていないから、ファイルかディレクトリかぐらいしか分からない。

private async void Drop(object sender, DragEventArgs e)
{
  if (e.DataView.Contains(StandardDataFormats.StorageItems))
  {
    var items = await e.DataView.GetStorageItemsAsync();
    foreach (var item in items)
    {
      System.Diagnostics.Debug.WriteLine("item is :" + item);
    }
  }
}