【问题标题】:How do you implement drag and drop from a small WPF Element host in a Winforms application?如何在 Winforms 应用程序中实现从小型 WPF 元素主机拖放?
【发布时间】:2011-03-14 21:35:18
【问题描述】:

在我们的应用中,我们在 Element 主机中托管一个小型 WPF 列表框,我们使用 PreviewMouseDown 事件实现拖放...

   private void Border_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            // Get the current mouse position
            Point mousePos = e.GetPosition(null);
            Vector diff = startPoint - mousePos;

            if (e.LeftButton == MouseButtonState.Pressed &&
                Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
                Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
            {
                OnDragStarted(e);                
            } 

        }

我们看到的问题是,当我相当快地单击并拖动一个项目时,WPF 控件仅在鼠标离开 Elementhost 之前触发一个 PreviewMouseMove 事件,因此直到鼠标返回到 Elementhost 才开始拖动操作并引发另一个 PreviewMouseMove 事件。

有处理这种情况的可靠方法吗?

【问题讨论】:

    标签: c# wpf drag-and-drop winforms-interop


    【解决方案1】:

    您必须在鼠标按下事件中捕获鼠标。此后的任何鼠标移动都将始终路由到您的窗口,即使光标不再悬停在它上面。在 WPF 中使用 Mouse.Capture() 方法。

    【讨论】:

    • 谢谢!这个问题困扰我很久了,现在终于解决了。我在预览鼠标按下事件中调用 Child.CaptureMouse(),在预览鼠标向上事件中调用 Child.ReleaseMouseCapture()。
    猜你喜欢
    • 2019-06-02
    • 2010-11-15
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多