4

画面上でドラッグできるように親指を追加したポップアップコントロールがあります。親指のDragDeltaイベントはこれで過負荷になりました:

private static void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        Thumb thumb = (Thumb)sender;
        Popup popup = thumb.Tag as Popup;

        if (popup != null)
        {
            popup.HorizontalOffset += e.HorizontalChange;
            popup.VerticalOffset += e.VerticalChange;
        }
    }

ドラッグは完全に機能します(ここからドラッグの例を使用しました:http://www.codeproject.com/Articles/43636/WPF-A-search)。ただし、ポップアップがモニターの最後に到達し、その他(デュアルモニターセットアップ)。たとえば、左側のモニターでポップアップを開いて右にドラッグし始めた場合、その右側の境界線がモニターの端に触れると、動きが不安定になり、さらに右に移動してもう一方に表示されるまで動き始めます。モニター。

このシナリオでデバッグしました。これは基本的に何が起こるかの数値例です。

At edge of screen:
HorizontalOffset = 600
HorizontalChange = 1

Move Right:
HorizontalOffset = 601
HorizontalChange = -800

HorizontalOffset = -199
HorizontalChange = 401

HorizontalOffset = 200
HorizontalChange = -150

これにより、ポップアップが他のモニターに移動するときに、この奇妙なストロボ効果が得られます。モニター間でスムーズに移行するために必要なことはありますか?

4

1 に答える 1

2

ポップアップを画面にバインド解除する方法はまだわかりませんが、代わりにウィンドウコントロールを使用することで必要なことを達成できました。WindowStyle.None境界線がないように作成MouseLeftButtonDownし、メソッドへのデリゲートでイベントをオーバーロードしDragMove()て、画面上でドラッグできるようにしました。これにより、ポップアップと非常によく似たルックアンドフィールを実現できましたが、ちらつきなく画面上でドラッグできました。

于 2012-08-02T13:41:04.017 に答える