拖放到桌面或资源管理器

32

根据我的方案:

我有一个应用程序,它从数据库中加载文件结构(文件夹、文件)到 WPF ListView 中。现在我想从这个 ListView 中获取一个文件,将它拖到我的桌面上(或某个打开的资源管理器窗口),然后将其放下。基本的拖放功能,没有花哨的东西。这听起来像是 Windows 应用程序的“标准”功能 - 但谷歌并不能帮忙。

那么我该如何实现呢?需要使用 Interops 吗?

谢谢。

编辑:感谢解决方案,我仍然需要进行一些谷歌搜索。 这是完整的解决方案


1
如果您能在此处发布完整的解决方案作为答案,我们将不胜感激。 - H H
1
我尝试了你的例子,但它无法编译,DragDrop未知。我需要添加参考或其他内容吗? - GuidoG
1个回答

30

DragDrop.DoDragDrop只要你传递合适的DataObject就可以实现这个功能。

首先将文件复制到某个地方。如果没有更好的地方,您可以使用System.IO.Path.GetTempPath()

接下来创建一个包含文件完整路径的字符串数组,然后执行以下操作:

string[] paths = ...;
DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, paths),
                    DragDropEffects.Copy); 

其实可以不预先复制文件就实现这个目标,但这需要涉及到一些 IDataObject 交互的复杂操作。因此,除非你的文件可能非常大且尚未存在于文件系统中,否则我建议首先尝试这种方法。


4
我知道这是一个很老的帖子,但你能不能详细解释一下你所提到的“除非您的文件可能非常大”的部分?我正在尝试做这件事。我想要一个拖放功能,在将文件拖放到某个地方时可以下载该文件。 - Falgantil
@Ray-Burns 将大文件复制到临时位置可能需要很长时间。有没有其他方法可以同时解决 IDataObject 交互的问题?请查看我的这里的问题 - Aishwarya Shiva
1
@AishwaryaShiva 但它们并没有作为文件复制到资源管理器中。我尝试拖放,但什么也没发生。 - Argnist
1
@Ray-Burns DragDrop对象从哪里来?我尝试了您的示例,但DragDrop不是已知的类。我需要添加一个引用吗? - GuidoG
2
需要注意的是,即使您只有一个文件,将数据存储在数组中也是至关重要的! - TaW
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接