1

MainChildの 2 種類のウィンドウがあります。メインを移動すると、すべての子ウィンドウも移動する必要があります。すべてのウィンドウに styleNoneがあるので、 を使用しますDragMove。子の移動にLocationChangeMainを使用します。また、メイン ウィンドウをすばやく移動し始めると、子は少し遅れて移動します。私のウィンドウはお互いにくっついているので、メインウィンドウを速く動かすと隙間ができます。この質問を使用します 一度に2つのWPFウィンドウを移動しますか?

このギャップを減らすにはどうすればよいですか?

いくつかのコード:

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        StickyWindow.ParentWndStartMove(this);
        this.DragMove();
    }

ここにすべての子を移動します

    public static void ParentWndMove(Window parentWindow)
    {
        for (int i = 0; i < windowsToMove.Length; i++)
        {
            if (windowsToMove[i])
            {
                windows[i].Top += -(parentWindowPosition.Y - parentWindow.Top);
                windows[i].Left += -(parentWindowPosition.X - parentWindow.Left);
            }
        }

        parentWindowPosition.X = parentWindow.Left;
        parentWindowPosition.Y = parentWindow.Top;
    }
4

2 に答える 2

1

コード フラグメントに基づいて、parentWindowPosition は X と Y が MainWindow の Left と Top の値に初期化された構造体またはクラスであると仮定します。

その場合は、MouseLeftButtonDown ハンドラーで行う必要があるのは、DragMove() を呼び出すことだけです。

private void MainWindow_OnMouseLeftButtonDown(object sender, 
                                              MouseButtonEventArgs e)
{
    DragMove();
}

MainWindow の LocationChanged イベントにハンドラーを登録します。

LocationChanged += MainWindow_OnLocationChanged;

ParentWndMove() メソッドを呼び出す

private void MainWindow_OnLocationChanged(object sender, EventArgs e)
{
     ParentWndMove(sender as Window)
}

このコードは私のシステムでは遅延なく動作し、メイン ウィンドウをどれだけ速くドラッグしても、ウィンドウの位置がずれることはありません。

注:投稿した ParentWndMove() メソッドには、コンパイル時のエラーがいくつかあります。参考までに修正版を載せておきます

public static void ParentWndMove(Window parentWindow)
{
    for (int i = 0; i < windowsToMove.Length; i++)
    {
        if (windowsToMove[i] != null)
        {
            windowsToMove[i].Top += -(parentWindowPosition.Y - parentWindow.Top);
            windowsToMove[i].Left += -(parentWindowPosition.X - parentWindow.Left);
        }
    }

    parentWindowPosition.X = parentWindow.Left;
    parentWindowPosition.Y = parentWindow.Top;
}
于 2013-10-17T19:41:44.310 に答える