Drag drop now supported in Universal apps!

When I am working on my desktop i am using regullary drag and drop. When i want to send an attachment to someone by email i simply drag it from the file explorer to the email. Or if want to send it with lync, drag a file from the fileexplorer to lync. In windows Store apps it wasn't possible to drag file to them. I found it pretty annoying to use the file picker. It required a lot of clicks to come at the location of the right file, to select the right files again. With Windows 10 universal apps also can be a drop target!

How to get drag drop in your application?

Well lets start with drop from explorer:

First need to enable your UI elements to be a drop target. To do this you need to implement 3 events: DragEnter, DragOver and Drop and set AllowDtop to true. This can look like this:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
          AllowDrop="True" DragEnter="Grid_DragEnter" DragOver="Grid_DragEnter" Drop="Grid_Drop">
        <TextBlock x:Name="DropFromExplorerText" Text="Drop here a file" VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="Black"/>
    </Grid>
</Page>

In code behind it's very easy too:

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

I use this handler for DragEnter and DragOver. In realworld application's is most like you don't want to accept everything but first want to see what kind of file is dropped. You can inspect this in the e parameter.

The second method you need it the real drop handler. Process the data that is dropped on your application:

private async void Grid_Drop(object sender, DragEventArgs e)
{
    var d = e.GetDeferral();
    var files = await e.DataView.GetStorageItemsAsync();
    DropFromExplorerText.Text = files.First().Path;
    d.Complete();
}

First you need to get the deferral. Let the OS know you are going to process the incoming file. At the second like you can get the dropped StorageItems. then process and finally let the OS know you completed the action by calling Complete method of the Deferral.

As you can see it's very easy to start with DragDrop operations in your Windows 10 app. It can be real productivity boosters for desktop users!

  •   @tfsbuck awesome work
  •   RT @tfsbuck: VSTS Queries Hub Updates Generally Available https://t.co/INSn71z2Hy
  •   RT @danvy: From Monolith to Cloud Service by @tfsbuck #devops #cloud https://t.co/vHeoxzYc3J https://t.co/d2av4kzaW5
  •   @JenMsft it almost want me to start playing computer games
  •   opening @Office365 admin center causes @MicrosoftEdge to reload till it says " This page is having a problem loading"
  •   @DonovanBrown @VSTS i love to them as well but missing test results in the release overview pretty much
  •   RT @ExpertsLiveNL: ICYM 📣 HURRY UP: grijp die laatste kaart(en) #ExpertsLiveNL is BIJNA uitverkocht. https://t.co/mBCi5uWBkk #nog7dagen #a…
  •   @rrelyea any idea why nuget via dotnet restore on linux build agents (vsts) takes 40seconds and via nuget restore o… https://t.co/hMiBsaCVcG
  •   @tfsbuck in a build task i am trying to give a summary for the build detail page but need some richer markup then m… https://t.co/hpIsT3OCIC
  •   @chrisrpatterson @Nick_Craver @tfsbuck really curious to the outcome; we use a Azure Sql db (create new one for tes… https://t.co/XGnlhWxjcD