从文件夹c#wpf中拖放文件

时间:2018-04-05 09:09:55

标签: c# wpf drag-and-drop

我试图在我的WPF应用程序中使用ListView,它接受拖放 - 文件和目录,但是在目录的情况下它应该从它们获取文件,而不是它们自己。 我的XAML:

<ListView ... AllowDrop="True" Drop="importListView_Drop">
...
</ListView>

我的代码背后:

private void importListView_Drop(object sender, DragEventArgs e)
{
    var files = (string[])e.Data.GetData(DataFormats.FileDrop);
    core.AddIntoImport(files);
}

现在生成包括目录和省略文件的输出,例如。

C:/Example/Files/MyFile.mp3
C:/Example/Files/SubDirectory/
...

虽然我希望它实际上从SubDirectory获取所有文件而不包括SubDirectory本身。我可以自己做这个:“是目录? - 是的:排除它并从中获取所有文件”但问题是,是否有一些更好的方法包括在f.e.事件args已经?

为了让自己更清楚,以下代码在WinForms应用程序中完美地完成了工作。在WPF中有替代方案吗?

private void Form1_DragDrop(object sender, DragEventArgs e)
{
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
    InsertImport(files);
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.Copy;
}

2 个答案:

答案 0 :(得分:0)

你可以用这个

var allFiles = files.Where(Directory.Exists)
                    .SelectMany(dir => Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories))
                    .ToList();

请注意,如果您对子目录没有适当的权限,则会抛出此内容。在这种情况下,您将不得不手动执行此操作,并检查/忽略错误

答案 1 :(得分:0)

最后设法以这种方式做到了……

Spotify's