3

我正在使用 WPF 应用程序,更具体地说是带有可拖动元素的 Canvas。

拖动项目后,我想将光标移动的范围限制在拖动项目的画布内。

可以开始拖动的事件如下所示


private void WidgetCanvas_PreviewHeaderLeftMouseDown(object sender, MouseButtonEventArgs e)
{
     e.Handled = true;
     ... logic to figure out if this is a valid drag, blah blah blah ...

     this.IsDragging = true;
     // TODO: clip the available cursor movement to actual width of Canvas
}

在 Preview-MouseUp 上,我想简单地将光标移动“取消剪辑”回到正常状态。

一旦开始拖动(PreviewMouseMove),我将监视鼠标的移动,所以最坏的情况是,我可以手动检查鼠标的位置并将其限制在画布上,但这似乎有点难看。

有人有更好的方法来限制光标边界吗?

4

2 回答 2

4

没有干净的方法可以做到这一点,不那么干净的方法会使您的鼠标光标在剪辑区域的边界处“抖动”

此外,我会质疑这是否真的是一个好主意。用户应该真正拥有鼠标,当您试图人为地限制他或她拥有的东西时,他或她通常会感到沮丧。

如果您想在鼠标离开画布时提供反馈,也许您可​​以在鼠标按钮仍然按下时让被拖动的项目卡在边框上?这将告诉用户他或她已经离开了目标区域,而没有试图对鼠标可以去的地方施加限制。

祝你好运!

于 2009-05-12T03:57:52.107 回答
3

您应该可以使用ClipCursor本机 API 来完成。

于 2009-05-12T08:29:31.523 回答