Как определить, когда мышь на прокрутке в wpf - PullRequest
1 голос
/ 07 октября 2011

У меня есть 2 списка, и я перетаскиваю элементы из одного в другой. Проблема в том, что когда прокрутка видна в списке и если я нажимаю на прокрутку для перемещения вверх / вниз, она начинает перетаскивать снова. Есть ли способ определить, когда мышь находится над областью прокрутки, чтобы я мог предотвратить запуск действия перетаскивания?

Следующий код:

Private Sub lstbox_PreviewMouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) 'Handles lstFieldsAvailable.PreviewMouseLeftButtonDown
    _mouseDownPos = e.GetPosition(Nothing)
    _isMouseDown = True
    _mouseDownSource = sender
End Sub

Private Sub lstbox_PreviewMouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs) 'Handles lstFieldsAvailable.PreviewMouseMove
    Dim mousePos As Point = e.GetPosition(Nothing)
    Dim diff As Vector = _mouseDownPos - mousePos
    Dim lstbox As ListBox = CType(sender, ListBox)

    If _isMouseDown And e.LeftButton = MouseButtonState.Pressed And lstbox.SelectedItems.Count > 0 And _
        lstbox.IsMouseOver And _
        (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance Or _
         Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance) Then

        'get the selected items
        Dim dragData As New DragDataStruct(lstbox)
        For Each item As String In lstbox.SelectedItems
            dragData.Items.Add(item)
        Next

        DragDrop.DoDragDrop(lstbox, dragData, DragDropEffects.Move)

    End If
End Sub

1 Ответ

0 голосов
/ 07 октября 2011

Вы действительно должны установить ListBox в качестве источника перетаскивания ...

Не можете ли вы использовать ListBoxItem в качестве источника перетаскивания?Если вы сделаете это, ListBoxItem автоматически исключит полосы прокрутки из перетаскиваемых областей.

...