2011-09-01 175 views
0

我正在尝试在某个点更改我的鼠标光标,当我在wpf listview中拖动鼠标时。但是,当我设置我的鼠标时,它会很快被其他东西覆盖,并返回到拖动光标。WPF等效于Control.CursorChanged事件

我不确定光标变化来自哪里,它肯定不是来自我的代码,所以它必须是系统。如果是系统,那么我必须拦截事件来更改光标,并处理事件以便光标显示我想要的对象?

那么是否有这个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()方法,以及一部分。当我一步一步地浏览调试器中的每行代码时,鼠标在进入拖动离开处理程序后立即从无光标变成拖动光标。这就是为什么我认为它必须是系统。如果它确实是系统,那么如果我能捕获事件触发,那么我可以自己处理这些事件,而不是让它通过它。

谢谢!

+0

错误的方法。如果你使用一个事件,那么光标就会在两者之间快速闪烁。你在“设置我的鼠标”中做错了,不知道它可能是什么。邮政编码。 –

+0

看到[拖放概述](http://msdn.microsoft.com/zh-cn/library/ms742859.aspx)?在那里可能有关于光标的事情... –

+0

@Lin:不关心在调试会话期间游标如何改变。 –

回答

1

只是不喜欢的工作,一个DragOver事件过程中设置光标的方法如下:

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

取决于DragDropEffects的枚举值分配给e.Effects将鼠标光标改变。

不要拨打Mouse.OverrideCursor因为不是正确的方法。

+0

这个确实有用,在我没有设定处理为真之前,所以我想其他的东西修改它。但是,在拖动过程中,我的光标偶尔会闪烁。我将如何去解决这个问题? – George

+0

我还发现改变AllowDrop属性也会改变游标,但是这会使我无法与不允许拖放的项目进行交互。我需要在DragOver事件处理程序中与项目交互,因此将AllowDrop设置为false对我来说不是一种选择。有没有其他的方法来改变光标,或者有办法让光标停止闪烁?谢谢! – George