在WindowsFormsHost内部使用鼠标WPF窗口移动

时间:2012-08-23 21:02:10

标签: c# .net wpf

我在网格中有一个mainWindow,在这个网格中有几个wpf UserControl。 我还有三种通过鼠标控制网格内部运动的方法。 MouseDownMouseMoveMouseUp,它运作正常。

当我在其中一个UserControl中添加WindowsFormsHost时,它就不再起作用了。我可以移动窗口,但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;
    }
}

1 个答案:

答案 0 :(得分:1)

也许尝试将translateTransform直接应用于WindowsFormHost,或者看看如果在mousemove之后使用WindowsFormHost.InvalidateVisual()会发生什么