#wpf #listbox #drag-and-drop
#wpf #listbox #перетаскивание
Вопрос:
У меня есть 2 списка, и я перетаскиваю элементы из одного в другой. Проблема в том, что когда прокрутка видна в listbox, и если я нажимаю на прокрутку для перемещения вверх / вниз, она снова начинает перетаскиваться. Есть ли какой-либо способ определить, когда мышь находится над областью прокрутки, чтобы я мог предотвратить инициирование действия перетаскивания?
Ниже приведен код:
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:
Вам действительно нужно установить ListBox в качестве источника перетаскивания…
Вы не можете использовать ListBoxItem в качестве источника перетаскивания? Если вы это сделаете, ListBoxItem автоматически исключит полосы прокрутки из их перетаскиваемых областей.