Drag & Drop in einem WPF TreeView auf der Bildlaufleiste

8

Wir verwenden das MVVM-Muster in unserer Anwendung und in einem Fenster haben wir zwei TreeView s, die es erlauben, Elemente von der ersten zu ziehen und sie auf die zweite Struktur zu legen. Um Code zu vermeiden, verwenden wir Verhaltensweisen, um das Ziehen und Ablegen an das ViewModel zu binden.

Das Verhalten ist ziemlich genau implementiert wie dieses Beispiel und funktioniert wie ein Zauber, mit einem Fehler.

Das Szenario ist ein Baum, der größer ist als das Fenster, in dem er angezeigt wird. Daher hat er eine vertikale Bildlaufleiste. Wenn ein Element ausgewählt ist und der Benutzer scrollen möchte, beginnt das Programm mit Ziehen und Ablegen (was das tatsächliche Scrollen verhindert und daher nicht das ist, was wir wollen).

Dies ist nicht sehr überraschend, da die Bildlaufleiste im Steuerelement TreeView enthalten ist. Aber ich kann nicht sicher feststellen, ob sich die Maus über der Bildlaufleiste befindet oder nicht.

Die TreeViewItems werden durch ein Thema dargestellt, das Borders, Panels usw. verwendet, also ist ein einfaches InputHitTest nicht so einfach, wie man vielleicht denkt.

Ist schon jemand auf dasselbe Problem gestoßen?

Wenn mehr Code für das Problem benötigt wird, kann ich einige Zeilen aus der .xaml einfügen.

Bearbeiten

Integration von Nikolays Link Ich löste das Problem mit einer IsMouseOverScrollbar Methode, wenn jemand dieses Problem in der Zukunft hat, muss der Code von oben wie folgt geändert werden:

%Vor%     
Matten 16.04.2012, 08:49
quelle

2 Antworten

4

Werfen Sie einen Blick auf diese Implementierung von Drag & Drop-Verhalten für ListView von Josh Smith . Es hat Code, um Scrollbars und einige andere nicht offensichtliche Probleme von DnD (wie Drag Schwelle, präzise Mauskoordinaten und so weiter) zu behandeln. Dieses Verhalten kann problemlos übernommen werden, um auch mit TreeViews zu arbeiten.

    
Nikolay 16.04.2012, 09:01
quelle
0

Ich hatte das gleiche Problem. Ich löste es, indem ich das TreeView in einen ScrollViewer platzierte.

%Vor%     
Johannes 11.11.2016 12:42
quelle