我想知道为什么WPF为其拖放系统定义了一个新的且显然相同的IDataObject版本?
我有应用程序代码,它使用winforms IDataObject,我现在需要与WPF拖放事件进行互操作。简单地编写一个实现System.Windows.Forms.IDataObject的适配器类,但是将调用传递给WPF提供的实际System.Windows.IDataObject是否安全?
由于 丹
答案 0 :(得分:0)
如果是同一个应用程序中的拖放,你可以看看: WinForms Interop, Drag & Drop from WinForms -> WPF
请注意,您可能会更好地为对象实现序列化。
答案 1 :(得分:0)
当我尝试调试此问题时,我发现了这个问题:
我正在放入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);