How to implement Drag & Drop Functionality in Universal Windows Platform (UWP)?

Introduction

 
In the software lifecycle, drag and drop is a very useful, common, and impressive feature.
 
From the user perspective also, it is handy to use drag and drop instead of the traditional open file dialogue box.
 
In UWP, it’s easy to implement and below, I’ve mentioned the step by step process to implement it.
 

Here are the steps

  1. In Visual Studio, create New Project as “Blank App (Universal Windows)”.


  2. In MainPage.xaml, create a grid with the two columns, having an identical width.
    1. <Grid.ColumnDefinitions>    
    2. <ColumnDefinition Width="*"/>    
    3. <ColumnDefinition Width="*"/>    
    4. </Grid.ColumnDefinitions>   
  3. Define a Grid, with these three important properties/events. 

    “AllowDrop”, “Drop” and “DragOver”.
    • AllowDrop is a Boolean property, which indicates whether the dropping of the item on this control is allowed or not.
    • DragOver is an event, where we will show the user a caption, and glyphs of the dragged items.
    • Drop event is useful, where we will define all the logic related to reading the file and displaying it (in our case).
      1. <Grid Grid.Row="0" Background="Aqua" AllowDrop="True"    
      2. Drop="Grid_Drop"    
      3. DragOver="Grid_DragOver"> 
  4. Define an Image control, where we will show the dropped image from the folder.
    1. <Image Name="imgMain" Grid.Column="1"/>   
    Here, we’ve completed our Layout page. Now, moving to code at the backend file MainPage.xaml.cs.

  5. In MainPage.xaml.cs, inside DragOver event handler, write the code, given below:
    1. private void Grid_DragOver(object sender, DragEventArgs e)    
    2. {    
    3.     //To specifies which operations are allowed    
    4.     e.AcceptedOperation = DataPackageOperation.Copy;    
    5.     // To display the data which is dragged    
    6.     e.DragUIOverride.Caption = "drop here to view image";    
    7.     e.DragUIOverride.IsGlyphVisible = true;    
    8.     e.DragUIOverride.IsContentVisible = true;    
    9.     e.DragUIOverride.IsCaptionVisible = true;    
    10. }   
  6. Inside the Drop event handler, write the code, given below:
    1. private void Grid_Drop(object sender, DragEventArgs e)    
    2. {    
    3.     if (e.DataView.Contains(StandardDataFormats.StorageItems))    
    4.     {    
    5.         var items = await e.DataView.GetStorageItemsAsync();    
    6.         if (items.Any())    
    7.         {    
    8.             var storageFile = items[0] as StorageFile;    
    9.             var contentType = storageFile.ContentType;    
    10.             StorageFolder folder = ApplicationData.Current.LocalFolder;    
    11.             if (contentType == "image/jpg" || contentType == "image/png" || contentType == "image/jpeg")    
    12.             {    
    13.                  StorageFile newFile = await storageFile.CopyAsync(folder, storageFile.Name, NameCollisionOption.GenerateUniqueName);    
    14.                 var bitmapImg = new BitmapImage();    
    15.                 bitmapImg.SetSource(await storageFile.OpenAsync(FileAccessMode.Read));    
    16.                 imgMain.Source = bitmapImg;    
    17.             }    
    18.         }    
    19.     }    
    20. }   
That’s all. Now run the Application.
 
 
 
P.S: These drag and drop files are copied to the Application’s local state folder. Thus, you need to take care of the deletion of these files also.
 
 
 
You can find this folder at the location, given below:
 
C:\Users\<UserName>\AppData\Local\Packages\<PackageID>\LocalState.
 

Summary

 
In this article, we learned about How to implement Drag & Drop Functionality in the Universal Windows Platform (UWP).