diff --git a/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml b/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml index 2ac55b06b518..ce7392e4f61b 100644 --- a/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml +++ b/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml @@ -37,6 +37,8 @@ x:Name="RecentFilesListView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" + CanDragItems="True" + DragItemsStarting="RecentFilesListView_DragItemsStarting" IsItemClickEnabled="True" IsRightTapEnabled="True" ItemClick="RecentFilesListView_ItemClick" diff --git a/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml.cs b/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml.cs index 47a634bb18c8..e9bba29b081f 100644 --- a/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml.cs +++ b/src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml.cs @@ -3,11 +3,13 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; +using Windows.ApplicationModel.DataTransfer; +using Windows.Storage; namespace Files.App.UserControls.Widgets { /// - /// Represents group of control displays a list of recent folders with . + /// Represents a control that displays a list of recent files with . /// public sealed partial class RecentFilesWidget : UserControl { @@ -30,5 +32,32 @@ private void RecentFilesListView_RightTapped(object sender, RightTappedRoutedEve { ViewModel.BuildItemContextMenu(e.OriginalSource, e); } + + private async void RecentFilesListView_DragItemsStarting(object sender, DragItemsStartingEventArgs e) + { + var item = e.Items.OfType().First(); + var storageItems = new List(); + + try + { + var file = await StorageFile.GetFileFromPathAsync(item.Path); + if (file != null) + storageItems.Add(file); + } + catch + { + e.Cancel = true; + } + + if (storageItems.Count > 0) + { + // Create a new data package and set the storage items + DataPackage dataPackage = new DataPackage(); + dataPackage.SetStorageItems(storageItems); + e.Data.SetDataProvider(StandardDataFormats.StorageItems, request => request.SetData(storageItems)); + + e.Data.RequestedOperation = DataPackageOperation.Move | DataPackageOperation.Copy | DataPackageOperation.Link; + } + } } }