[UWP][ドラッグ&ドロップ] ドラッグ&ドロップを実装する

今回はUWPアプリでのドラッグ&ドロップについて見ていきます。

MainPage.xamlには既定でGridが配置されています。

このGridでドラッグ&ドロップをできるようにするには、はじめにAllowDropプロパティをTrueにしておきます。

続いて、DragOverのイベントを作成します。このイベントは、アプリケーション内にドラッグしようとしているときに発生します。

このイベントのe.AcceptedOperationにDataPackageOperation列挙体の値を設定することで アイコンの見た目を変更することができます。

設定可能なアイコンは以下表の通りです。

説明
Copy ドラッグしようとしているアイコンの上に「コピー」の文字が表示される
Move ドラッグしようとしているアイコンの上に「移動」の文字が表示される
Link ドラッグしようとしているアイコンの上に「リンク」の文字表示される
None ドラッグしようとしているアイコンの上に「禁止マーク」が表示される

コピーアイコンにする場合は以下のようにコードを記述します。

private void Grid_DragOver(object sender, DragEventArgs e)
{
    e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Link;
}

続いてドロップされた場合の処理ですが、個の場合はDropイベントが発生します。

引数のe.DataView.Containsメソッドで、ドロップされたファイルの種類を調べます。

ドロップされたファイルの種類はWindows.ApplicationModel.DataTransfer.StandardDataFormatsが持つ値で指定します。

指定可能な値を以下の表に示します。

ApplicationLink
Bitmap
Html
Rtf
StorageItems
Text
Uri
WebLink

ファイルがドロップされたことを調べるには以下のように記述します。

private async void Grid_Drop(object sender, DragEventArgs e)
{
    if (e.DataView.Contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.StorageItems))
    {
        // ファイルのパス一覧を取得する
        var items = await e.DataView.GetStorageItemsAsync();
        var filePaths = items.Select(x => x.Path).ToArray();
    }
}