繁体   English   中英

WPF Dragdrop,如何在拖动过程中以视觉方式拒绝掉落?

[英]Wpf dragdrop, how to visually reject the drop during the drag?

在Wpf中拖动期间,如何更改鼠标光标(或使用装饰器)以指示droptarget将不接受拖动的项目?

DragEnter事件期间,我尝试设置e.Effects = DragDropEffects.None ,但是此操作不起作用,我怀疑我误解了该功能的用途。 我尝试使用GiveFeedback事件,但没有看到droptarget如何影响它。

是否有任何教程涵盖droptarget中droptarget的拒绝?

只需在放置目标的DragEnter中设置DragDropEffects即可。 是您的DragEnter甚至被呼叫。 您是否在放置目标控件上设置了AllowDrop?

这是WPF拖放过程中的事件序列(取自MSDN),可能有助于弄清楚发生了什么...

  1. 通过调用源控件的DoDragDrop方法来启动拖动。

    DoDragDrop方法采用两个参数:*数据,指定要传递的数据* allowedEffects,指定允许进行哪些操作(复制和/或移动)

    将自动创建一个新的DataObject对象。

  2. 这反过来引发GiveFeedback事件。 在大多数情况下,您不必担心GiveFeedback事件,但是如果要在拖动过程中显示自定义鼠标指针,则可以在其中添加代码。
  3. 将AllowDrop属性设置为True的任何控件都是潜在的放置目标。 可以在设计时在“属性”窗口中设置AllowDrop属性,也可以在Form_Load事件中以编程方式设置。
  4. 当鼠标移过每个控件时,将引发该控件的DragEnter事件。 GetDataPresent方法用于确保数据格式适合于目标控件,并且Effect属性用于显示适当的鼠标指针。
  5. 如果用户将鼠标按钮释放到有效的放置目标上,则会引发DragDrop事件。 DragDrop事件处理程序中的代码从DataObject对象提取数据,并将其显示在目标控件中。

我有一个类似的问题,因为我在GiveFeedback处理程序中更改了光标。 即使放置目标确实拒绝了数据,也使用了此光标。 切换回默认光标(e.UseDefaultCursors = true)后,光标形状确实更改为“不允许”。

您没有说是否甚至使用DragOver 也许您正在设置e.Effect = DragDropEffects.All; 在这种情况下,它将在您输入目标控件后被重复触发,而不是仅触发一次的DragEnter

    private void arbol_DragOver(object sender, DragEventArgs e)
    {
        if (some_reason)
            e.Effect = DragDropEffects.None;
        else
            e.Effect = DragDropEffects.All;
    }

如果您未使用此事件或未在其中修改e.Effect ,那么很难说。 需要代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM