繁体   English   中英

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

[英]WPF: Keep custom cursor while mouse is down

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

编辑:
我尝试遵循此答案中的建议: https : //stackoverflow.com/a/2986757/3818295但是我的PreviewMouseLeftButtonUp处理程序从未被调用。

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

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

最好在拖动过程中临时订阅拖动源的LostMouseCapture事件,如果丢失捕获,则取消拖动操作。 如果丢失了捕获,则不能保证您会收到鼠标上移事件,因此在那时您应该放弃。 记住在拖动终止后取消订阅LostMouseCapture

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM