2016年3月27日日曜日

エクスプローラからのドラッグ

ページ全体でエクスプローラからのファイルドロップを受けるには。
ページの AllowDrop を true にする。
最低でも DragEnter と Drop のイベント処理を行う。

DragEnter では ドラッグされてきたデータの種別をチェックし StorageItems であればドロップを受け付けるようにする。
private void Page_DragEnter(object sender, DragEventArgs e)
{
 if (e.DataView.Contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.StorageItems)) {
  e.DragUIOverride.Caption = "File Open";
  e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
  e.Handled = true;
 }
}

Drop イベントでドロップされたファイルの処理を行う。
private async void Page_Drop(object sender, DragEventArgs e)
{
 var d = e.GetDeferral();

 try {
  var files = await e.DataView.GetStorageItemsAsync();
  var file = files.First();

  Debug.WriteLine(file.Path);
 }
 catch (Exception){ }

 d.Complete();
}