2015-08-06 5 views
1

В этот момент примеры Drag and Drop предназначены только для хранения файлов, таких как изображения и т. Д. Но что происходит с папками.Drag & Drop StorageFolders в UWP Приложения для Windows 10

У меня есть успех реализован файл и несколько файлов, но когда я пытаюсь с папкой и читать его элементы возвращает 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 элементов, поэтому может быть, он не реализован или не поддерживается.

ответ

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(); 
     } 

, а затем использовать этот код для события перетаскивания

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 (не вложенные папки, которые вы должны расширить этот код, чтобы увидеть вложенные папки), а также файлы хранилища, которые вы сбросили, и имя папки хранения. вы можете увидеть образец для падения хранения предметов здесь: (Названный падение файл) https://onedrive.live.com/?id=D1BA3C73BE854A97%21370578&cid=D1BA3C73BE854A97&group=0&parId=D1BA3C73BE854A97%21227&authkey=%21AF52vPagWyrz%2DPA&action=locate

+0

Здравствуйте, да, что код работает, вопрос я на самом деле это немного особенным, потому что я использую в папке Избранное и это немного нечетное реализовано, потому что это не настоящая папка. Я получил ответ от Microsoft, и поддержка url и фаворитов стала новой в W10, и она внедряется. Попробуйте с этим посмотреть, что произойдет –