2016-04-08 6 views
0

Ich versuche, die Drag-Drop-Sortierfunktion in meine App zu implementieren, und ich habe ein kleines Problem. Lassen Sie uns sagen, dass ich so etwas wie dieses:Wie kann ich Drop ziehen, um Objekte nur mit einer Maus zu sortieren?

<ListView ItemsSource="{x:Bind ViewModel.Source, Mode=OneWay}" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
      CanReorderItems="True" 
      CanDragItems="True" 
      AllowDrop="True" 
      DragItemsStarting="MyList_DragItemsStarting" 
      DragItemsCompleted="MyList_OnDragItemsCompleted"/> 

ich das ganze Zeug bin ich Umgang mit der DragItemsStarting und abgeschlossene Ereignisse brauchen, und alles funktioniert einwandfrei.

Das Problem ist, dass ich etwas anderen Code habe, der ausgelöst wird, wenn der Benutzer einen Touchscreen verwendet (wie Streichen Aktionen und Sachen) und ich möchte die Drag/Drop-Operation auf nur verfügbar sein, wenn Sie eine Maus verwenden .

Ich sehe keinen Ort, an dem ich je nach dem Zeiger Gerätetyp wechseln kann, und ich weiß nicht, wo ich aussehen soll.

Gibt es eine Möglichkeit, das zu tun? Hat jemand so etwas implementiert und kann erklären, wie man das programmiert?

Vielen Dank für Ihre Hilfe!

Sergio

Antwort

0

So gibt es viele Lösungen für diese. Aber warum immer das Rad neu erfinden. Es gibt eine coole Bibliothek, die du für deine Sachen verwenden kannst.

Also die GongSolutions.WPF.DragDrop-Bibliothek ist ein Drag'n'Drop-Framework für WPF und Sie können es für ListView, ListBox oder was auch immer ItemsControls verwenden.

<ListView ItemsSource="{Binding YourCollection}" 
    dd:DragDrop.IsDragSource="True" 
    dd:DragDrop.IsDropTarget="True" 
    dd:DragDrop.DropHandler="{Binding}" /> 

Es ist MVVM bereit und eine Beispieldemo ist auch dort, wo Sie die Bibliothek in Aktion sehen können.

Hoffnung, das hilft.

+1

Leider arbeite ich an einer UWP-App und nicht an WPF. Funktionieren einige der anderen Lösungen, mit denen Sie gesprochen haben, auch für UWP/WinRT? Vielen Dank! – Sergio0694

1

können Sie UIViewSettings class verwenden, um den aktuellen Interaktionsmodus zu bekommen, und aktivieren oder die gesuchte Funktion zum Beispiel wie folgt deaktivieren:

switch (UIViewSettings.GetForCurrentView().UserInteractionMode) 
{ 
    case UserInteractionMode.Mouse: 
     listView.AllowDrop = true; 
     listView.CanDragItems = true; 
     listView.CanReorderItems = true; 
     break; 

    case UserInteractionMode.Touch: 
    default: 
     listView.AllowDrop = false; 
     listView.CanDragItems = false; 
     listView.CanReorderItems = false; 
     break; 
} 

„Listview“ ist der Name des ListView, die in XAML-Code definiert ist. Sie können diesen Code beispielsweise immer dann verwenden, wenn der Punkt über ListView liegt oder die Seite geladen ist oder zu einem anderen Zeitpunkt.

+0

Das sieht gut aus! Aber was, wenn die App auf einem Gerät mit Maus und Touchscreen läuft? Ich möchte, dass die Elemente nur dann sortiert werden, wenn der Benutzer versucht, sie mit der Maus zu ziehen. Gibt es eine Möglichkeit, das zu implementieren? Vielen Dank! – Sergio0694

+0

@ Sergio0694, habe es nicht getestet, ich habe jetzt kein Gerät, nur Emulator, durch Emulator können wir den Eingabemodus auswählen, aber können Sie versuchen, diesen Code am Anfang des 'DragItemsStarting' Ereignisses zu setzen? Freuen Sie sich auf Ihre Tests. –

+0

Scheint jetzt gut zu funktionieren - es funktioniert auf meinem PC mit einer Maus, und es meldet die Verwendung eines Touchscreens (so dass ich den Ziehvorgang abbrechen kann), wenn ich es auf meinem Handy getestet habe. Ich bin mir immer noch nicht sicher, wie das bei einem Hybridgerät funktionieren wird – Sergio0694

Verwandte Themen