Skip to content

Commit 5dd7a6b

Browse files
authored
Feature: Added support for dragging recent files (#16716)
1 parent 34d908c commit 5dd7a6b

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
x:Name="RecentFilesListView"
3838
HorizontalAlignment="Stretch"
3939
VerticalAlignment="Stretch"
40+
CanDragItems="True"
41+
DragItemsStarting="RecentFilesListView_DragItemsStarting"
4042
IsItemClickEnabled="True"
4143
IsRightTapEnabled="True"
4244
ItemClick="RecentFilesListView_ItemClick"

src/Files.App/UserControls/Widgets/RecentFilesWidget.xaml.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
using Microsoft.UI.Xaml.Controls;
55
using Microsoft.UI.Xaml.Input;
6+
using Windows.ApplicationModel.DataTransfer;
7+
using Windows.Storage;
68

79
namespace Files.App.UserControls.Widgets
810
{
911
/// <summary>
10-
/// Represents group of control displays a list of recent folders with <see cref="WidgetFolderCardItem"/>.
12+
/// Represents a control that displays a list of recent files with <see cref="WidgetFolderCardItem"/>.
1113
/// </summary>
1214
public sealed partial class RecentFilesWidget : UserControl
1315
{
@@ -30,5 +32,32 @@ private void RecentFilesListView_RightTapped(object sender, RightTappedRoutedEve
3032
{
3133
ViewModel.BuildItemContextMenu(e.OriginalSource, e);
3234
}
35+
36+
private async void RecentFilesListView_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
37+
{
38+
var item = e.Items.OfType<RecentItem>().First();
39+
var storageItems = new List<IStorageItem>();
40+
41+
try
42+
{
43+
var file = await StorageFile.GetFileFromPathAsync(item.Path);
44+
if (file != null)
45+
storageItems.Add(file);
46+
}
47+
catch
48+
{
49+
e.Cancel = true;
50+
}
51+
52+
if (storageItems.Count > 0)
53+
{
54+
// Create a new data package and set the storage items
55+
DataPackage dataPackage = new DataPackage();
56+
dataPackage.SetStorageItems(storageItems);
57+
e.Data.SetDataProvider(StandardDataFormats.StorageItems, request => request.SetData(storageItems));
58+
59+
e.Data.RequestedOperation = DataPackageOperation.Move | DataPackageOperation.Copy | DataPackageOperation.Link;
60+
}
61+
}
3362
}
3463
}

0 commit comments

Comments
 (0)