Вызов LineXXXCommands похож на нажатие кнопок со стрелками на полосе прокрутки: ScrollViewer прокручивается на определенную сумму, которую вы можете настроить, установив свойство «SmallAmount» на панели прокрутки.

отал с решением БеаВот на некоторое время и найти его очень полезным. Теперь у меня проблема, когда я перетаскиваю элементы внутри или в другой элемент управления ListView и хочу прокрутить вверх / вниз «во время» перетаскивания (перемещение элемента из индекса 30 в индекс 1), это не происходит. Мне бы пришлось перетащить наверх визуальные элементы в ListView, вручную прокрутить вверх, а затем снова перетащить, в конечном итоге заканчивая в нужной позиции. Это не очень удобно для пользователя.

Теперь я нашел функцию (DragDropHelper.DropTarget_PreviewDragOver), которую я хотел бы проверить, какой элемент перетаскивается, и я получаю это.

Dim pt As Point = e.GetPosition(DirectCast(Me.targetItemsControl, UIElement))

' Perform the hit test against a given portion of the visual object tree.
Dim result As HitTestResult = VisualTreeHelper.HitTest(Me.targetItemsControl, pt)

Теперь оттуда я могу получить свойство DependencyProperty этого визуального хита

Dim lvi As ListViewItem = TryCast(GetDependencyObjectFromVisualTree(TryCast(result.VisualHit, DependencyObject), GetType(ListViewItem)), ListViewItem)

Который из ListViewItem. Теперь в функции DropTarget_PreviewDragOver у меня есть «DraggedItem», который имеет тип Picture в примере Bea, но это может измениться в зависимости от ObservableCollection, который вы привязали к ListView. Теперь я хочу перетащить ListView вверх или вниз в зависимости от того, где находится мышь на элементе управления. Я попытался с помощью приведенного ниже незавершенного нерабочего кода

If lvi IsNot Nothing Then
    If pt.Y <= 25 Then
        Dim lv As ListView = TryCast(targetItemsControl, ListView)
        If lv IsNot Nothing Then
            Dim index As Integer = lv.Items.IndexOf(lvi)
            If index > 1 Then
                lv.ScrollIntoView(lv.Items(index - 1))
            End If
        End If
    Else
        If pt.Y >= Me.targetItemsControl.ActualHeight - 25 Then
            Debug.Print("Scroll Down")
        End If
    End If
End If

Может кто-нибудь указать мне правильное направление, чтобы заставить этот ItemsControl или ListView прокручивать при перетаскивании элементов ??

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос