1

目前拖放的示例仅适用于图像等存储文件。但是文件夹会发生什么。

我已经成功实现了文件和多个文件,但是当我尝试使用文件夹并读取其项目时,它返回 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 个项目,因此可能未实现或不支持。

4

1 回答 1

3

嗨,我知道回答这个问题有点晚了,但也许此时它对你有帮助。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 的内容(不是子文件夹,您必须展开此代码才能看到子文件夹)和您删除的存储文件以及存储文件夹的名称。您可以在此处查看放置存储项目的示例:(命名文件放置) https://onedrive.live.com/?id=D1BA3C73BE854A97%21370578&cid=D1BA3C73BE854A97&group=0&parId=D1BA3C73BE854A97%21227&authkey=%21AF52vPagWyrz%2DPA&action=locate

于 2015-08-31T11:10:13.927 回答