此时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项,因此可能没有实现或支持。
答案 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