【问题标题】:How to limit cursor movement in WPF based app?如何限制基于 WPF 的应用程序中的光标移动?
【发布时间】:2009-05-12 02:46:31
【问题描述】:

我正在使用 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),我将监视鼠标的移动,所以在最坏的情况下,我可以手动检查鼠标的位置并将其限制在画布上,但这似乎有点难看。

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

【问题讨论】:

    标签: c# wpf mouse cursor-position


    【解决方案1】:

    There's no clean way to do this 和不那么干净的方式会让你的鼠标光标变成"jitter" at the border of the clipping area

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

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

    祝你好运!

    【讨论】:

    • 在阅读了您的 cmets 以及 MSDN 上的其他一些与相同观点相呼应的内容之后,我最终做到了这一点。我监视将开始拖动的事件的项目(因为只有在使用鼠标在项目标题上按下时才开始拖动)。一旦开始拖动,我在画布上捕获鼠标,并允许将项目拖动到画布的末尾,但不能再拖到更远的地方。即使鼠标不在画布上,项目的位置也可以改变,只要没有 MouseUp。
    • 这听起来是个不错的解决方案。感谢您发布更新...很高兴看到对您有用。
    【解决方案2】:

    您应该可以使用 ClipCursor 原生 API 来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      相关资源
      最近更新 更多