3

在我们的应用程序中,我们在 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 才开始拖动操作引发事件。

有没有一种稳健的方法来处理这种情况?

4

1 回答 1

2

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

于 2011-03-14T21:45:38.447 回答