2016-07-05 8 views
0

グリッド内の四角形のコントロールがあります。グリッド内のあるセルから別のセルに長方形をドラッグすることができます。しかし、編集ダイアログを表示するには、四角形をダブルクリックする必要もあります。ここで問題となるのは、四角形の上でマウスの左ボタンを押すだけでMouseMoveイベントが開始され、望ましくないときにDragDropが開始されることです。WPF - MouseDoubleClickでDragDropをしない方法は?

ここMouseMoveMouseDoubleClickイベントハンドラです:

Dim IsDragging As Boolean = False 
Private Sub SchedItem_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove 
    If IsDragging Then Exit Sub 
    If e.LeftButton = MouseButtonState.Pressed Then 
     Dispatcher.InvokeAsync(Sub() 
            IsDragging = True 
            DragDrop.DoDragDrop(Me, Me, DragDropEffects.Move) 
            IsDragging = False 
           End Sub) 
    End If 
End Sub 

Private Sub SchedItem_PreviewMouseDoubleClick(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseDoubleClick 
    itmEditTask_Click(Nothing, Nothing) 
    e.Handled = True 
End Sub 

私はマウスがMouseLeftButtonDownイベント後の走行した距離を決定するために試みることによってMouseMoveを開始しないで試してみましたが。しかし、x &の数字はどこにでもあり、私はしきい値を確実に設定できません。そのコードは次のとおりです。

Private mPos As Point 
Private Sub SchedItem_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonDown 
    mPos = Mouse.GetPosition(Nothing) 
End Sub 

Private Function IsReallyMouseMove() As Boolean 
    Dim pPos As Point = Mouse.GetPosition(Nothing) 
    Debug.WriteLine(Math.Abs(mPos.X - pPos.X) & ", " & Math.Abs(mPos.Y - pPos.Y)) 
    IsReallyMouseMove = Math.Abs(mPos.X - pPos.X) > 10 OrElse Math.Abs(mPos.Y - pPos.Y) > 10 
End Function 

だから私は誰かがこれを行い、ある方向性を提供してくれることを望んでいます。

答えて

0

最善の方法 - 再設計。 item要素内のオブジェクトによってアイテムをドラッグ可能にします。 (たぶん小さなドラッグカーソルで異なるドット) 他の領域はダブルクリックを処理します。

関連する問題