公式ドキュメントが若干不親切
ドラッグ アンド ドロップ - Windows apps | Microsoft Learn
ポイントは以下
- ドラッグアンドドロップを実装するコントロールに次の2つのプロパティを設定する。
- AllowDrop="True"
- CanDrag="True"
- DragOverイベントハンドラを実装してプロパティに設定する。
- Dropイベントハンドラを実装してプロパティに設定する。
結果的にドラッグアンドドロップを受けるコントロールには、少なくとも次の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); } } }