WPF:鼠标停止时保持自定义光标

时间:2018-01-24 19:18:01

标签: c# wpf cursor

我已经创建了一个自定义光标,并通过Cursor属性将其应用到我的控件,当鼠标悬停在控件上时它会正确显示,但是一旦我单击,光标就会变回默认值。我想要的是自定义光标在鼠标停止(并可能被移动)时保持不变,并在鼠标出现时(通过任何可能的控制)恢复正常。我意识到我可以通过在鼠标按下时设置Mouse.OverrideCursor来做到这一点,但我不确定如何在鼠标出现时将覆盖光标设置回来,因为它可以在屏幕上的任何位置释放。我想要的行为类似于单击单元格并在Excel中拖动。有没有人对我如何实现这种行为有任何建议?

编辑:
我尝试按照这个答案中的建议:https://stackoverflow.com/a/2986757/3818295但是我的PreviewMouseLeftButtonUp处理程序永远不会被调用。

1 个答案:

答案 0 :(得分:0)

如果要为整个应用程序全局更改光标,请使用Mouse.SetCursor方法。光标将保持更改,直到您再次明确更改它。要将其更改回来,请致电Mouse.SetCursor(Cursors.Arrow); 传递nullCursors.None,因为它们会为您提供一个特殊的“隐形”光标。

如果您只想在鼠标按下时更改光标,则启动“拖动”操作的控件将需要捕获鼠标,以便即使在光标离开原始控件。这可确保源控件最终接收鼠标向上事件(除非捕获丢失)。要捕获鼠标,请拨打c.CaptureMouse()Mouse.Capture(c),其中c是您的控件。您需要在拖动操作终止时释放捕获,例如,通过c.ReleaseCapture()

在拖动期间临时订阅拖动源的LostMouseCapture事件是个好主意,如果捕获丢失则取消拖动操作。如果捕获丢失,您无法保证接收鼠标按键事件,所以此时您应该放弃。拖动终止后,请记得取消订阅LostMouseCapture