【问题标题】: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);