WPF相当于Control.CursorChanged事件

时间:2011-09-01 20:53:47

标签: c# wpf drag-and-drop cursor

当我在wpf listview中拖动鼠标时,我正试图在某个点改变我的鼠标光标。但是,当我设置鼠标时,它会被其他东西快速覆盖,并更改回拖动光标。

我不确定光标更改的来源,肯定不是来自我的代码,所以它必须是系统。如果是系统,那么我必须截取事件以进行光标更改,并处理事件以便光标显示我想要的内容吗?

那么这个Control.CursorChanged事件的WPF是否等效?或许还有其他方法来解决这个问题?

编辑:

这是我的代码的一部分

    private void SetDragCursor()
    {
        if (_badDragLoc)
        {
            Mouse.OverrideCursor = Cursors.No;
        }
        else
        {
            Mouse.OverrideCursor = Cursors.Arrow;
        }
    }
    private void listView_DragOver(object sender, DragEventArgs e)
    {
        if (at a bad drag location)
        {
            _badDragLoc = true;
            SetDragCursor();
        }
    }

我还有一个拖动事件处理程序,其中我也有SetDragCursor()方法。当我一步一步地遍历调试器中的每行代码时,鼠标在进入拖动离开处理程序后立即从无光标转向拖动光标。这就是为什么我认为它必须是系统。

如果它确实是系统,那么如果我可以捕获事件触发,那么我可以自己处理这些事件,而不是让它冒泡。

谢谢!

1 个答案:

答案 0 :(得分:1)

就是这样不起作用,在DragOver事件期间设置光标的方法如下:

void listView__DragOver(object sender, DragEventArgs e)
     {
         if (!e.Data.GetDataPresent("Images"))
         {
             e.Effects = DragDropEffects.None;
             e.Handled = true;
         }
     }

根据您分配给e.Effects的DragDropEffects枚举值,鼠标将更改光标。

不要拨打Mouse.OverrideCursor,因为这不是正确的方式。