从 WinForms 拖放到 WPF 问题

Posted

技术标签:

【中文标题】从 WinForms 拖放到 WPF 问题【英文标题】:DragDrop from WinForms to WPF issue 【发布时间】:2017-08-06 14:28:30 【问题描述】:

我有旧的WinForms 应用程序,具有拖放功能(没有任何源代码)。现在我需要创建一个新的 WPF 应用程序,它可以使用 DragDrop 从旧的应用程序接收一些数据。但是 DragDrop 在 WPF 应用程序中不起作用,并且任何事件:DragEnterDragOverDragLeaveDrop 都不会触发。我只使用 DragDrop 功能创建了其他简单的 WinForms 应用程序,并且工作正常。此外,我可以从这个简单的 WinForms 应用程序拖放到 WPF 应用程序。

我尝试“以管理员身份”运行我的应用程序,但没有这个 - 没有任何改变。 有谁知道,如何解决这个问题或根本原因是什么,或者可能是这种奇怪行为的根本原因?

【问题讨论】:

【参考方案1】: 您是否在 wpf xaml 中设置了 (AllowDrop="true")? 如果是,您是否为捕获表单或控件处理Drop 事件?

有关更多详细信息,请参阅 ***.com 上的此问题: WPF Drag and Drop

【讨论】:

是的,当然。正如我所说,我有 3 个应用程序:具有拖动功能的旧应用程序、具有拖放功能的新 WPF 和具有 DragAndDrop 功能的测试 WinForms。并且仅适用:旧 -> 测试 WinForms,测试 WinForms -> WPF,但我的目标 - 旧 -> WPF。 另外,我尝试使用 ole32 库中的 RegisterDragDrop,但它返回了错误代码。 @ArturKorop 我对 WPF 不是很熟悉,但同样的原则也适用于 C# WinForms。有时您必须从 FileFormat 显式处理相同的确切类型。【参考方案2】:

好的,我能够解决问题。原因 - 旧应用程序将 RegisterDragDrop 用于 OleDataFormat,但新 WPF - 将 RegisterDragDrop 用于 DataFormat。解决方案 - 将 AllowDrop 设置为 false,并将 ole32.dll 中的 RegisterDragDrop 用于具有自定义 IDropTarget 接口或 WinForms 库的 OleDataFormat。

【讨论】:

以上是关于从 WinForms 拖放到 WPF 问题的主要内容,如果未能解决你的问题,请参考以下文章

WPF:将文件拖放到整个窗口中(包括标题栏和窗口边框)

WinForms 互操作,从 WinForms 拖放 -> WPF

从WPF拖放到不同的目标[重复]

如何将图片从资源管理器拖放到 WPF 控件上?

将一封或多封邮件从 Outlook 拖放到 C# WPF 应用程序

如何允许从 Windows 资源管理器拖放到 C# WPF 应用程序中?