在 UWP Windows 10 个应用程序中拖放存储文件夹

Drag & Drop StorageFolders in UWP Windows 10 Apps

此时拖放示例仅适用于图像等存储文件。但是文件夹会发生什么情况。

我成功实现了一个文件和多个文件,但是当我尝试使用一个文件夹并读取它的项目时 returns 0 个文件,我的代码:

if (e.DataView.Contains(StandardDataFormats.StorageItems))
{
var items = await e.DataView.GetStorageItemsAsync();

bool hasfolders = false;

foreach (var item in items)
{
    if (item is StorageFile)
    {
        var newFavorite = await FavoriteFromFile(item as StorageFile, groupcategory.Key);
        if (newFavorite != null)
            newFavorites.Add(newFavorite);
    }
    else if(item is StorageFolder)
    {
        var favs = await FavoritesFromFolder(item as StorageFolder, groupcategory.Key);
        hasfolders = true;
    }
}
...

在 FromFolder 中:

  private async Task<List<Favorite>> FavoritesFromFolder(StorageFolder folder, Category cat)
    {
        List<Favorite> ret = new List<Favorite>();

        foreach (var item in await folder.GetItemsAsync())
        {

此处 returns 0 项,因此可能未实现或不受支持。

您好,我知道现在回答这个问题有点晚了,但也许现在对您有所帮助。 1.检查您想要的对象上的 Allow Drop 。 2.转到事件并为您的对象添加 DropOver 和 Drop 事件。 3.将此代码用于您的 DropOver :

var d = e.GetDeferral();
        try
        {
            var items = await e.DataView.GetStorageItemsAsync();

            if (items != null)
                e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;

        }
        catch { }
        finally
        { 
            d.Complete();
        }

然后将此代码用于放置事件

var deferral = e.GetDeferral();

        var filesAndFolders = await e.DataView.GetStorageItemsAsync();
        MessageDialog msg = new MessageDialog("");

        foreach (var item in filesAndFolders)
        {
            if (item is IStorageFile)
                msg.Content += "\nFile:" + item.Name;

            if (item is IStorageFolder)
            {
                msg.Content += "\nFolder:" + item.Name;
                var folder = await ((StorageFolder)item).GetFilesAsync();
                foreach (var fold in folder)
                {
                    msg.Content += "\nFolderContent:" + fold.Name;
                }
            }
        }
        await msg.ShowAsync();
        deferral.Complete();

确定,现在调试您的应用程序并删除多个存储文件和文件夹。您可以看到 StorageFolder Root 的内容(不是子文件夹,您必须展开此代码才能看到子文件夹)和您删除的存储文件以及存储文件夹的名称。 您可以在此处查看 Drop Storage Items 示例:(命名文件 drop) https://onedrive.live.com/?id=D1BA3C73BE854A97%21370578&cid=D1BA3C73BE854A97&group=0&parId=D1BA3C73BE854A97%21227&authkey=%21AF52vPagWyrz%2DPA&action=locate