从 WinForms 拖放到 WPF 问题
Posted
技术标签:
【中文标题】从 WinForms 拖放到 WPF 问题【英文标题】:DragDrop from WinForms to WPF issue 【发布时间】:2017-08-06 14:28:30 【问题描述】:我有旧的WinForms
应用程序,具有拖放功能(没有任何源代码)。现在我需要创建一个新的 WPF 应用程序,它可以使用 DragDrop 从旧的应用程序接收一些数据。但是 DragDrop 在 WPF 应用程序中不起作用,并且任何事件:DragEnter
、DragOver
、DragLeave
、Drop
都不会触发。我只使用 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 问题的主要内容,如果未能解决你的问题,请参考以下文章
WinForms 互操作,从 WinForms 拖放 -> WPF