2012-04-15 9 views
1

Ist es möglich, Benachrichtigungen über ein MouseMove-Ereignis zu erhalten, auch wenn diese als erledigt markiert sind? Ich habe folgende XAML:Möglich, alle MouseMove-Ereignisse in WP7.1 zu behandeln?

<Grid x:Name="ParentContainer"> 
    <ScrollViewer> 
    ... 
    </ScrollViewer> 
</Grid> 

Mein Ziel ist es, alle Move Ereignisse auf dem Scroll oder etwas ziemlich nah an ihn wie der ParentContainer, ohne zur Einstellung ManipulationMode = „Control“ auf dem Scrollzurückgreifen zu bekommen für die bestmögliche Leistung.

Die Verarbeitung von MouseMove auf dem ParentContainer (oder dem ScrollViewer) funktioniert, wenn ManipulationMode = "Control" auf dem ScrollViewer gesetzt ist, aber nicht, wenn ManipulationsMode = "System". Es scheint, als ob die Leistung in Mango verbessert wurde, der ScrollViewer begann, MouseMove-Ereignisse zu verschlucken, um die Leistung zu verbessern. Ich würde jedoch erwarten, dass diese behandelt Ereignisse wie folgt zu erhalten:

ParentContainer.AddHandler(???.MouseMoveEvent, MyMouseMoveHandler, true); 

In Silverlight oder WPF würde ich diesen Code zu routen alle Mausereignisse MyMouseMoveHandler, auch behandelt Ereignisse erwarten. Leider kann ich keine statische Definition von MouseMoveEvent finden, die an AddHandler übergeben werden soll.

Hat jemand Erfolg mit AddHandler mit MouseMoveEvent in WP7?

Meine letzte Möglichkeit kann sein, ein Overlay über dem ScrollViewer mit Background = "Transparent" hinzuzufügen, das alle Mausereignisse erfasst, aber nicht als behandelt markiert und sieht, ob sie sich bis zum ScrollViewer ausbreiten.

Antwort

4

In Windows Phone OS 7.1 wurden Änderungen vorgenommen, um das Scrollen des ScrollViewer-Steuerelements speziell zu verbessern. Dazu mussten sie das Zuhören der Berührungsgesten zu einem separaten Thread bewegen. Dies bedeutete eine Änderung der Architekturebene für die Art und Weise, wie die Steuerung den Gesten zugehört hat. Mit Windows Phone 7.1 gibt es jetzt 3 Threads, die für das Scrollen des ScrollViewers zuständig sind: eine für die Eingabe, eine für Animationen und eine für das Erstellen neuer Elemente.

Aufgrund dieser Änderung können die erfassten Mausereignisse von diesem Steuerelement nicht erfasst werden, es sei denn, Sie legen den Manipulationsmodus auf "Steuerung" fest. Wie Sie in Ihrer Frage angegeben haben, werden dadurch die Änderungen deaktiviert, die vorgenommen wurden, um die Bildlaufleistung zu verbessern.

Sie können nicht erwarten, dass eine Lösung, die für Nicht-Windows Phone Silverlight funktioniert, in diesem Fall funktioniert, da die zugrunde liegende Architektur auf dem Telefon ab Windows Phone 7.1 grundlegend anders ist.

Hier Blog-Post von Microsoft die Änderung in Bezug auf: http://blogs.msdn.com/b/slmperf/archive/2011/06/02/listbox-scrollviewer-performance-improvement-for-mango-and-how-it-impacts-your-existing-application.aspx

+0

Danke für die gründliche Antwort Brian. Sie haben Recht, AddHandler() ist eine nicht-Silverlight-Methode, um darüber zu gehen, ich hatte gehofft, einen Workaround zu finden (siehe meine Antwort unten). –

Verwandte Themen