5

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

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

4

3 回答 3

7

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

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

  1. 通过调用源代码管理的 DoDragDrop 方法来启动拖动。

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

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

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

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

于 2013-04-25T09:02:27.973 回答
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,那就很难说。需要代码。

于 2016-02-01T15:01:45.583 回答