0

DataGrid ビューでドラッグ アンド ドロップを実行しようとしています。

DataGrid はユーザー コントロール内で定義されており、ユーザー コントロールはタブコントロール内でホストされています。

現在、次のイベントを処理しています

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 関数内のベクトル diff は常にゼロです。

驚いたことに、同じロジックが triewview コントロール内では機能しますが、データグリッド内では機能しませんか? どんな助けでも大歓迎です

4

1 に答える 1

0

LeftButtonDown イベントの直前に常に MouseMove イベントを取得するため、現在のコードでは startPoint は常に mousePos と同じになります。

ハンドラーを交換すると修正されるはずです (PreviewLeftButtonDown のコードは PreviewMouseMove にあり、startPoint は PreviewLeftButtonDown に設定されている必要があります)。

于 2013-07-08T20:38:43.243 に答える