c# - 在 WindowsFormsHost 里面用鼠标移动 WPF Window

标签 c# .net wpf

我在网格中有一个主窗口,在该网格中有几个 wpf 用户控件。 我还有三种方法可以通过鼠标控制网格内的移动。 MouseDownMouseMoveMouseUp 并且它工作正常。

当我在其中一个 UserControl 中添加 WindowsFormsHost 时,它就不再工作了。我可以移动窗口,但 WindowsFormsHost 留在同一个地方。

我想知道当我有 WindowsFormsHost 时,如何使用鼠标事件在网格内移动窗口。

提前致谢。

问候, 菲利普。

附言。这些是我用来在网格内移动 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;
    }
}

最佳答案

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

关于c# - 在 WindowsFormsHost 里面用鼠标移动 WPF Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099917/

相关文章:

c# - 以编程方式禁用 Windows 7 上的虚拟键盘?

c# - WPF 用户控件不允许丢失焦点在单独的控件上更改

c# - 如何将 "var"用法(而不是显式类型)视为警告?

c# - ASP.net 中的静态文件和身份验证

c# - 让 .net DLL 作为 Windows 服务运行的简单方法

c# - Const 与 protected 静态只读

c# - 无法修改“System.Collections.Concurrent.ConcurrentDictionary”的返回值

c# - .NET WebAPI集中授权

c# - 调用 SetBackBuffer 时出现 D3DImage OutOfMemoryException

c# - Windows 应用程序 : Best Practices & Patterns (C#/WPF/LINQ)