我有一个实现拖放的ListBox drop:它适用于单个项目(选择一个项目,然后将其拖到另一个项目的顶部将把它放在正确的位置),但是当选择多个项目时(使用shift或ctrl)我无法使其工作。
我的主要问题是我不知道DragDrop.DoDragDrop
函数如何处理批量项目。它适用于单个项目(指定FrameworkElement,然后指定数据格式和数据,最后指定拖动效果)。但如果我有多个项目,我该如何使用DoDragDrop
?既然我必须指定一种格式,它是否总是期望该格式的单个实例?我有几个'实体'我想拖放,如何告诉DragDrop.DoDragDrop
在一次操作中接受所有数据?
当我只将一个DataObject
传递给DoDragDrop
方法时,它非常有效,但我需要找到一种方法在一次调用中传递多个对象。
到目前为止,我已尝试创建多个DataObjects并尝试创建一个数组或列表以添加到DoDragDrop
作为其数据,但这不起作用。我也尝试循环DoDragDrop
,因此对于我拖动的每个项目都会调用一次,但这也不起作用。
答案 0 :(得分:1)
我设法解决了这个问题。对于数据,我传递了一个我需要拖动的对象列表,当处理拖放时,我会以列表的形式接收数据然后执行我需要做的事情。
我遇到的问题是我无法理解不仅仅属于一个数据对象的“格式”概念。对于格式我只需要
DragDrop.DoDragDrop((FrameworkElement)sender, new DataObject("System.Collections.Generic.List<object>", _dragSources.Select(x => x.DataContext).ToList()), DragDropEffects.Copy);
一切顺利。即使在MSDN文档中,也没有提到“格式”部分实际上只是一个关键。您可以输入任何字面上的内容,只要它与您用于获取数据的内容相匹配(在本例中为e.Data.GetData("System.Collections.Generic.List<object>") as List<object>;
),那么您就是黄金。