如何在Winforms应用程序中从小的WPF元素宿主实现拖放?

3
在我们的应用程序中,我们在一个元素宿主中托管了一个小的WPF ListBox,使用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事件才开始。
有没有一种稳健的方式来处理这种情况?
1个回答

2

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


谢谢!这个问题已经困扰我的应用程序很长时间了,现在终于解决了。我在预览鼠标按下事件中调用Child.CaptureMouse(),并在预览鼠标抬起事件中调用Child.ReleaseMouseCapture()。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接