0

我正在尝试在 DataGrid 视图中进行拖放。

我的 DataGrid 是在用户控件中定义的,并且用户控件托管在 tabcontrol 中

现在我正在处理以下事件

PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown" 
PreviewMouseMove="OnPreviewMouseMove"

处理程序定义如下;

private void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    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))
    {
        // .......doing drag/drop work here.......
    }
}

private void OnPreviewMouseMove(object sender, MouseEventArgs e)
{
    startPoint = e.MouseDevice.GetPosition(null);
}

其中 startPoint 是 Point 类型的内部变量

但是,OnPreviewMouseLeftButtonDown 函数中的向量差异始终为零。

令我惊讶的是,相同的逻辑在 triewview 控件中有效,但在数据网格中无效?任何帮助将非常感激

4

1 回答 1

0

您总是会在 LeftButtonDown 事件之前立即获得 MouseMove 事件,因此 startPoint 将始终与当前代码的 mousePos 相同。

交换您的处理程序应该可以修复它(PreviewLeftButtonDown 中的代码应该在 PreviewMouseMove 中,并且 startPoint 应该在 PreviewLeftButtonDown 中设置)。

于 2013-07-08T20:38:43.243 回答