在 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
此时拖放示例仅适用于图像等存储文件。但是文件夹会发生什么情况。
我成功实现了一个文件和多个文件,但是当我尝试使用一个文件夹并读取它的项目时 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