【发布时间】:2022-01-03 01:35:11
【问题描述】:
涉及使用 Kong DragDrop WPF NuGet(但即使不使用也可能不会影响拖放操作的典型功能)。
设置:
- 处理 ListBox 的 PreviewDrop 事件。
- DataObject 变量。
- 将 e.Data 分配给 DataObject 变量
- 将对象从任何位置拖放到此 ListBox 以触发。
- 调试断点以在 Locals 中查看 DataObject。
我需要得到什么:
ListBoxItem 的内容或拖入其中的 TreeViewItem 的标题(Gong 允许您这样做)或放入我的 ListBox 中的整个对象。
我可以实际看到这个 DataObject 在其非公共成员 -> InnerData -> 非公共成员 -> 数据 -> 原始视图 -> 值 -> 结果视图 -> (0) -> 中包含放置的对象(0) -> 数据,但我不知道如何访问它。
我尝试过的:
谷歌搜索溢出和代码项目,VB.Net 文档,没有发现任何具体的问题(或者可能太模糊了)。
我尝试使用反射来获取 InnerData 字段,如下所示:
Dim myElement = GetType(DataObject).GetField("innerData", System.Reflection.BindingFlags.NonPublic).GetValue(e.Data),
但是我得到 System.NullReferenceException: 'Object reference not set to an instance of an object.'。
Dim myInnerData = myData.GetType().GetField("_innerData", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
会得到我的innerData,但是我失去了“innerData”的“数据”,让我仍然无法获得附加到DataObject的对象。
【问题讨论】:
-
我尝试使用反射来获取 InnerData 字段,如下所示: Dim myElement = GetType(DataObject).GetField("innerData", System.Reflection.BindingFlags.NonPublic).GetValue(e.Data),但是我得到 System.NullReferenceException: 'Object reference not set to an instance of an object.'.
-
在任何你想检查
DragEventArgs.Data成员的拖动处理程序中。它应该能够告诉您您拥有什么数据类型。在我的情况下,我调用e.Data.GetDataPresent并给它DataFormats.FileDrop字段,因为这是我的处理程序期望的类型。如果你不知道你的处理程序接收的是什么类型,我建议你打电话给IDataObject.GetFormats看看里面有什么。 -
@Joe 没有返回任何可用的值(可能是由于龚 WPF),您不知道如何访问 NonPublic InnerData 字段?用反射查看我的评论,也许我在那里做错了什么,但如果我设法阅读该字段,我可以以某种方式获得我的对象。