WPF:鼠标按下时保持自定义光标

WPF: Keep custom cursor while mouse is down

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

编辑:
我尝试遵循此答案中的建议: 但是我的 PreviewMouseLeftButtonUp 处理程序从未被调用。

如果要为整个应用程序全局更改光标,请使用 Mouse.SetCursor 方法。光标将保持更改状态,直到您再次明确更改它。要将其改回,请调用 Mouse.SetCursor(Cursors.Arrow)不要传入nullCursors.None,因为它们会给你一个特殊的'invisible'光标。

如果您只想在鼠标按下时更改光标,那么启动 'drag' 操作的控件将需要 捕获 鼠标以便它即使在光标离开原始控件后仍继续接收事件。这确保源代码管理最终接收到鼠标弹起事件(除非捕获丢失)。要捕获鼠标,请调用 c.CaptureMouse()Mouse.Capture(c),其中 c 是您的控件。您需要在拖动操作终止时释放捕获,例如,通过 c.ReleaseCapture().

最好在拖动期间临时订阅拖动源的LostMouseCapture事件,如果捕获丢失则取消拖动操作。如果捕获丢失,则不能保证您会收到鼠标弹起事件,因此此时您应该放弃。记得在拖拽结束后退订LostMouseCapture