2010-07-07 5 views
5

Ich habe eine WPF 4-Anwendung, wo ich Drag and Drop mit dem Standard DragDrop.DoDragDrop Ansatz implementiert habe, aber ich mache es mit Touch statt Mausereignisse.WPF 4 Multi-Touch-Drag & Drop

für meinen Grid Meine XAML (das Im Schleppen) ist wie folgt:

<Grid x:Name="LayoutRoot" 
     ManipulationStarting="ManipulationStarting" 
     ManipulationDelta="ManipulationDelta" 
     ManipulationCompleted="ManipulationCompleted" 
     IsManipulationEnabled="True"> 
    <!-- children in here --> 
</Grid> 

nun hinter dem Code wie folgt aus:

private void ManipulationStarting(object sender, ManipulationStartingEventArgs e) 
    { 
     e.ManipulationContainer = this; 
     e.Handled = true; 
    } 

    private void ManipulationDelta(object sender, ManipulationDeltaEventArgs e) 
    { 
     e.Handled = true; 
     DragDrop.DoDragDrop(this, new DataObject(GetType(), this), DragDropEffects.Move); 
    } 

    private void ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) 
    { 
     //completed stuff 
    } 

ABER wenn ich versuche, mit einem ziehen Finger, während sie bereits mit einem anderen Finger ziehen (verschiedene Hände zum Beispiel, die zwei Personen simulieren würden), die zweiten Berührungen scheinen nicht richtig zu registrieren, tatsächlich scheint es, dass Windows denkt, dass meine zwei Finger versuchen zu skalieren (wie eine Pinch Geste)) ...

Kennt jemand einen Weg, um dies zu umgehen?

Vielen Dank Mark

Antwort

4

Für Multi-Touch, Sie gehen die Oberfläche Toolkit für Windows Touch verwenden wollen. Es enthält ein Drag-and-Drop-Framework, das für Multitouch-Szenarien geeignet ist. Es enthält eine drag-and-drop framework. Dieser Link enthält mehrere How-To-Szenarien.

+0

danke Josh, ill werfen Sie einen Blick auf diese – Mark

+0

Ab dem 21. März 2013 ist das Surface 2.0 SDK und Runtime zum Download verfügbar, hier: http://www.microsoft.com/en-us/download/details. aspx? id = 26716 –

1

Obwohl dies nur eine Vermutung ist, würde ich sagen, dass DragDrop.DoDragDrop() nicht in der Lage ist, mehrere drag guestures parallel zu handhaben.

Indices:

  • Es gibt keine Möglichkeit, einen Touch-ID an die Methode übergeben (die zur Unterscheidung der laufenden Drag Gesten nötig wäre)
  • Die Implementierung von DoDragDrop() statisch ist
  • Der Aufruf DoDragDrop() blockiert, bis der Tropfen aufgetreten oder wurde abgebrochen
  • Es basiert auf der OLE-Version von Drag & Drop (die für Win7 nicht aktualisiert wurde)

Allerdings würde ich mich freuen, wenn mich jemand in dieser Angelegenheit korrigieren könnte, weil ich momentan auch eine DND-API suche, die für Touch-Unterstützung geeignet ist.

Grüße, Sieben