将文件拖放到 wpf/C# 应用程序时,如何在 Windows 资源管理器中维护文件顺序?

Posted

技术标签:

【中文标题】将文件拖放到 wpf/C# 应用程序时,如何在 Windows 资源管理器中维护文件顺序?【英文标题】:How do I maintain the file order in Windows Explorer when drag and dropping files into wpf/C# application? 【发布时间】:2011-09-02 00:08:34 【问题描述】:

在我的应用程序中,用户可以将文件从 Windows 资源管理器拖放到我的应用程序的列表框中。这一切都很好,但是当拖动多个文件时,根据用户在 Windows 资源管理器中单击哪个文件开始拖动,调用时传递的文件顺序会有所不同:

e.Data.GetData(DataFormats.FileDrop)

如何按照文件在 Windows 资源管理器中的显示顺序接收文件?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

如果您从 0000 到 0010 移位选择一堆文件,然后将它们拖到应用程序中(比如视频文件并将它们拖到 VLC 中)。 Explorer 不会按照您选择项目的顺序而是从您左键单击并拖动的项目中提供列表。

单击 0000,它们将按数字顺序显示。 点击 0003,它们会显示从 0003 到 0010,然后是 0001 和 0002

所以“拖放”的正确方法是始终从顶部拖动。

【讨论】:

有谁知道这个反直觉的逻辑是从哪里来的?是否有一个有益的原因,或者只是一个没有人愿意解决的奇怪怪癖?【参考方案2】:

您收到它们的顺序是它们被选中的顺序。我以前遇到过一次这个问题,据我所知,您无法按照 Explorer 的排序顺序获取它们。

因此,您的代码应假定用户按该顺序选择它们是有原因的。

【讨论】:

感谢您的回复。我发现情况正好相反,因为用户希望文件按照从 Windows 资源管理器中拖动时出现的顺序排列。 我对这些用户有感觉,这就是我寻求解决方案的原因。但是,Windows 必须假设用户以给定的顺序选择它们是有原因的,因此您也应该这样做。这不是很好,但它是 Windows 没有尝试为您考虑的领域之一(MS 在其他领域经常受到抨击)。 很公平。感谢您的帮助。 我的“解决方案”是提供修饰键来开启最常见的类型(名称、日期、类型)。我不相信我的用户曾经在生产中使用过这些。 这听起来像是观察到的行为,而不是 Explorer 按合同执行的操作。如果是这种情况,您至少应该注释您的代码,以防某些未来版本的 Explorer(或您尚未测试的过去版本)改变行为并破坏您的代码假设。我意识到有时需要依赖“当前行为”,但请确保您了解这一点并至少考虑过该行为变化的后果。并准备好让您的申请成为未来“旧新事物”文章的匿名主题。

以上是关于将文件拖放到 wpf/C# 应用程序时,如何在 Windows 资源管理器中维护文件顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件从 HTML5 拖放到 Rails 3 应用程序和回形针?

为啥我不能将文件拖放到 Qt 示例拖放示例中?

将承诺的文件拖放到 Dock 中的应用程序图标上

如何将外部文件拖放到我的 xojo 应用程序并返回路径

如何实现从 qt 应用程序拖放到文件系统文件夹?

如何在打开对话框时禁用拖放