DragDropEffects.Copy将自身重置为None

时间:2013-08-28 09:47:45

标签: c# wpf scatterview

ScatterViewItem中有一个Scatterview,我的操作不是由我处理的。我在ScatterView中也有一个RichTextBox,其属性为AllowDrop = True

默认情况下,只要将ScatterViewItem拖入其中,RichTextBox的DragEnter事件就会触发,这是正确的。我在这里检查了DragDropEffect,它是DragDropEffect.Move。在此之后Drop事件会适当地触发。

我在DragEnter中将DragDropEffect从Move更改为Copy,但Drop事件不再触发。我在DragOver中再次检查了DragDropEffect,它以某种方式成为None。我尝试在DragOver中将其设置为Copy(再次),但每次在DragOver的下一个触发器上它将自动变为None

Drop事件触发的唯一时间是DragDropEffect设置为AllMove。如何将其更改为DragDropEffect.Copy并仍然触发Drop事件?设置为DragDropEffect.Copy后,我确实设置了e.Handled = true

编辑: 我道歉,我确实操纵了svi的拖拽。在ScatterView的OnManipulationStarted中,我获得了svi并调用了svi.BeginDragDrop(svi.DataContext)。这就是我对svi所做的一切。

1 个答案:

答案 0 :(得分:0)

(DragEventArgs).AllowedEffects属性值是多少?您只能将(DragEventArgs).Effects属性设置为(DragEventArgs).AllowedEffects属性指定的值之一。如果DragDropEffects.Copy不是(DragEventArgs).AllowedEffects属性枚举中的选项,那么就可以使用该功能。

您可以在创建数据对象时设置该选项并调用DoDragDrop

DragDrop.DoDragDrop(item, dragData, DragDropEffects.All);

更新>>>

正如我所说,通常情况下,当您调用DragDropEffects时设置允许的DoDragDrop枚举...在看到您调用了SurfaceDragCursor.BeginDragDrop方法后,我在网上看了{ MSDN上的{3}}页面,发现了这个:

public static SurfaceDragCursor BeginDragDrop (
    FrameworkElement dragSource,
    FrameworkElement draggedElement,
    FrameworkElement cursorVisual,
    Object data,
    IEnumerable<InputDevice> inputDevices,
    DragDropEffects allowedEffects
)

我猜测这里的最后一个参数是你设置DragDropEffects允许效果枚举的位置。