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

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

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

【问题讨论】:

    标签: c# .net wpf winforms


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

    有关更多详细信息,请参阅 stackoverflow.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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2011-06-16
      相关资源
      最近更新 更多