当我在wpf列表视图中拖动鼠标时,我试图改变我的鼠标光标。但是,当我设置鼠标时,它很快就会被其他东西覆盖,并变回拖动光标。
我不确定光标的变化来自哪里,它肯定不是来自我的代码,所以它必须是系统。如果是系统,那么我必须拦截光标更改的事件,并处理该事件,以便光标显示我想要的内容,对吗?
那么WPF中是否存在与此控件等价的控件?CursorChanged事件吗?或者也许有其他方法可以解决这个问题?
编辑:这是我的部分代码
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()方法。当我在调试器中一步一步地检查每一行代码时,鼠标在进入拖放处理程序后立即从无光标变为拖放光标。这就是为什么我认为必须是系统。
如果它确实是系统,那么如果我可以捕获事件触发,那么我就可以自己处理这些事件,而不让它冒泡。
谢谢!
不是这样的,在DragOver事件期间设置光标的方法如下:
void listView__DragOver(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("Images"))
{
e.Effects = DragDropEffects.None;
e.Handled = true;
}
}
根据指定给e.Effects
的dragdropeffeffects enum的值,鼠标将改变光标。
不要调用Mouse.OverrideCursor
,因为这不是正确的方法。