2

グリッド内に mainWindow があり、このグリッド内に wpf UserControls がいくつかあります。マウスでグリッド内の動きを制御するメソッドも 3 つあります。 MouseDownMouseMoveそしてMouseUpそれは正しく動作します。

WindowsFormsHostこれらの UserControl の内部に追加すると、機能しなくなります。ウィンドウを移動できWindowsFormsHostますが、同じ場所にとどまります。

内部がある場合に、マウス イベントを使用してグリッド内でウィンドウを移動する方法を知りたいWindowsFormsHostです。

前もって感謝します。

よろしく、フェリペ。

PS。これらは、グリッド内で UserControl を移動するために使用するメソッドです。

public void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    isDragging = true;
    var draggableControl = sender as UserControl;
    clickPosition = e.GetPosition(this);
    draggableControl.CaptureMouse();
}

public void Control_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    isDragging = false;
    var draggable = sender as UserControl;
    draggable.ReleaseMouseCapture();
}

public void Control_MouseMove(object sender, MouseEventArgs e)
{
    var draggableControl = sender as UserControl;

    if (isDragging && draggableControl != null)
    {
        Point currentPosition = e.GetPosition(this.Parent as UIElement);

        var transform = draggableControl.RenderTransform as TranslateTransform;
        if (transform == null)
        {
            transform = new TranslateTransform();
            draggableControl.RenderTransform = transform;
        }

        transform.X = currentPosition.X - clickPosition.X;
        transform.Y = currentPosition.Y - clickPosition.Y;
    }
}
4

1 に答える 1

1

translateTransform を WindowsFormHost に直接適用するか、mousemove の後に WindowsFormHost.InvalidateVisual() を使用するとどうなるかを確認してください。

于 2012-08-23T21:16:45.643 に答える