拖拽在UWP Windows 10应用程序中删除StorageFolders

时间:2015-08-06 09:54:28

标签: windows-10 uwp

此时Drag和Drop的示例仅适用于StorageFiles,例如图像等。但是文件夹会发生什么。

我成功实现了文件和多个文件,但是当我尝试使用文件夹并读取其项目时,它返回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())
        {

这里返回0项,因此可能没有实现或支持。

1 个答案:

答案 0 :(得分:2)

嗨,我知道回答这个问题有点晚了,但也许这对你来说可能会有所帮助。 1。检查所需对象上的“允许删除”。 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();
        }

然后将此代码用于drop事件

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的示例:(命名文件丢弃) https://onedrive.live.com/?id=D1BA3C73BE854A97%21370578&cid=D1BA3C73BE854A97&group=0&parId=D1BA3C73BE854A97%21227&authkey=%21AF52vPagWyrz%2DPA&action=locate