Wpf dragdrop,如何在拖动过程中直观地拒绝掉落?

时间:2009-11-02 05:36:42

标签: wpf drag-and-drop cursor

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

我试图在e.Effects = DragDropEffects.None事件期间设置DragEnter,但这不起作用,我怀疑我误解了应该使用的功能。我已尝试使用GiveFeedback事件但未看到droptarget如何影响它。

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

3 个答案:

答案 0 :(得分:6)

只需在放置目标的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对象中提取数据并将其显示在目标控件中。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你使用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,那么很难说。代码是必需的。