WPF ListView-Datenbindung per Drag/Drop Auto-Scroll

Arbeite ich mit Bea ' s Lösung hier für eine Weile und finden es sehr hilfreich. Problem jetzt das ich habe ist, wenn ich per drag-n-drop-Elemente, die innerhalb oder in ein anderes ListView-Steuerelement, und ich möchte, um den Bildlauf nach oben/nach unten "während der" ziehen (verschieben eines Elements von der index 30 index 1), ist es nicht passiert. Ich würde ziehen müssen, um die Spitze der visuellen Elemente im ListView-Steuerelement manuell nach oben scrollen, dann wieder ziehen, schließlich endet an der position, die ich möchte. Dies ist nicht sehr benutzerfreundlich.

Jetzt fand ich die Funktion (DragDropHelper.DropTarget_PreviewDragOver), ich würde wollen, um die Tests zu tun, welches Element gezogen wird, vorbei, und ich bekomme, dass.

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)

Nun von dort bekomme ich die DependencyProperty dieses visual Treffer

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

Ist ein ListViewItem. Jetzt in der Funktion DropTarget_PreviewDragOver ich habe die "DraggedItem", die vom Typ Bild in der Bea ' s Beispiel, aber das kann sich ändern, abhängig von der ObservableCollection du gebunden an das ListView-Steuerelement. Nun, ich will ziehen Sie das ListView-Steuerelement nach oben oder unten, je nachdem, wo der Mauszeiger auf dem Steuerelement. Ich habe versucht, mit dem unter un-fertige, nicht-funktionierenden code

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

Kann mir jemand zeigen in die richtige Richtung zu bekommen, das ItemsControl oder ListView zu scrollen beim ziehen der Maus über die Elemente??

Dank!

  • Hi, Hast du eine Lösung finden? Cheers
  • Sorry, ich habe noch nicht Zeit gehabt, zu schauen, in diesem mehr. Haben Sie lief über etwas, seit Sie gepostet?
InformationsquelleAutor ScottN | 2009-02-18
Schreibe einen Kommentar