【问题标题】:WPF/WinForms DragDrop IDataObjectWPF/WinForms DragDrop IDataObject
【发布时间】:2010-10-14 13:56:46
【问题描述】:

我想知道为什么 WPF 为其拖放系统定义了一个新的且明显相同的 IDataObject 版本?

我有使用 winforms IDataObject 的应用程序代码,我现在需要与 WPF 拖放事件进行互操作。简单地编写一个实现 System.Windows.Forms.IDataObject 但将调用传递给 WPF 提供的实际 System.Windows.IDataObject 的适配器类是否安全?

谢谢 丹

【问题讨论】:

    标签: wpf winforms drag-and-drop


    【解决方案1】:

    场景

    我在调试这个问题时发现了这个问题:

    我正在进入一个 WinForms 应用程序,在 Drop 事件处理程序中,我收到的对象是 System.Windows.Forms.IDataObject

    但是,我使用库来完成 Drop 事件的繁重工作,它需要一个 System.Windows.IDataObject 类型的对象。我无法编辑库源代码。

    问题

    如果我试图简单地在类型之间进行转换......

    // data is of type System.Windows.Forms.IDataObject
    var newData = (System.Windows.IDataObject)data; // debugger exits function after this line of code
    

    ...调试器只会在该行代码处退出函数而不会出错。该行之后的代码都不会执行。

    解决方案

    我创建了我在 WinForms 事件处理程序中调用的代理方法。 System.Windows.DataObject 的构造函数将接受 System.Windows.Forms.DataObject

    public void DropEventProxy(System.Windows.Forms.IDataObject data)
    {
        System.Windows.IDataObject newData = new System.Windows.DataObject(data);    
        LibraryDropEventHandler(newData);
    }
    
    public string LibraryDropEventHandler(System.Windows.IDataObject data);
    

    【讨论】:

      【解决方案2】:

      如果是用于同一个应用程序中的拖放,你可以看看: WinForms Interop, Drag & Drop from WinForms -> WPF

      请注意,您可能会更好地为您的对象实现序列化。

      【讨论】:

        猜你喜欢
        • 2016-07-04
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多