DragDropEffect.Copy将自身重置为None

本文关键字:None Copy DragDropEffect | 更新日期: 2023-09-27 18:29:13

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

默认情况下,只要将ScatterViewItem拖动到RichTextBox的DragEnter事件中,就会触发该事件,这是正确的。我在这里检查了DragDropEffect,它是DragDropEffect.MoveDrop事件在那之后适当地激发。

我在DragEnter中将DragDropEffect从Move更改为Copy,但Drop事件不再触发。我在DragOver中再次检查了DragDropEffect,它不知怎么变成了None。我试着在DragOver中将其设置为Copy(再次),但每次它都会在DragOver的下一个触发器上自动变为None

只有当DragDropEffect设置为AllMove时,才会触发Drop事件。如何将其更改为DragDropEffect.Copy并仍然激发Drop事件?在设置为DragDropEffect.Copy.后,我确实设置了e.Handled = true

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

DragDropEffect.Copy将自身重置为None

(DragEventArgs).AllowedEffects属性值是多少?只能将(DragEventArgs).Effects属性设置为(DragEventArgs).AllowedEffects属性指定的值之一。如果DragDropEffects.Copy不是(DragEventArgs).AllowedEffects属性枚举中的选项,则将无法使用该函数。

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

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

更新>>>

正如我所说,通常情况下,当您调用DoDragDrop时,您会设置允许的DragDropEffects枚举。。。在看到您调用了SurfaceDragCursor.BeginDragDrop方法之后,我在线查看了MSDN上的SurfaceDragDrop.BeginDragDrop方法页面,发现了以下内容:

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

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