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 に答える