Archivieren

Archiv für 2010

Touch-Unterstützung in Silverlight

8. Oktober 2010 2 Kommentare

Dieser Beitrag ist eine Modifikation des MSDN-Artikel Multitouch Input und Gesture-Unterstützung für Windows Phone , einen schnellen Überblick und eine Referenz für mich auf Silverlight Touch-Unterstützung.

Überblick

Unten Klassendiagramm zeigt die wichtigsten Klassen für Silverlight Touch-Unterstützung:

Silverlight Touch Class Diagram

  • Kontakt
    • Touch-Ereignisse werden asynchron.
    • Touch-Ereignisse werden immer über Application Level abgefeuert Berühren . FrameReported Veranstaltung.
    • Da berühren Ereignisse global sind, sind sie direkt, und es gibt keine Notwendigkeit für Touch zu erfassen.
    • Multitouch wird unterstützt.
  • Manipulation
    • Manipulation Veranstaltungen werden von UIElement ausgesetzt. Sie sind Veranstaltungen geleitet.
    • Manipulation Veranstaltungen sind immer gefeuert, IsManipulationEnabled Eigenschaft nicht unterstützt wird.
    • Manipulation Ereignisse synchron sind.
    • Nur Übersetzungs-und Ausbau unterstützt werden, wird die Rotation nicht.
    • Concurrent mehrere Manipulationen werden nicht unterstützt.
    • Die Geste ist nicht direkt unterstützt. Es wird unterstützt von XNA und Silverlight für Windows Phone Toolkit .
  • Controls: auf Windows Phone 7 unterstützt ScrollViewer Pan & Flick, Button unterstützt tab.

Silverlight 3

Platform Requirements

Multitouch erfordert eine Umgebung (Gerät, Plattform und Betriebssystem; Hostanwendung wie ein Browser), dass die Touch-Eingabe, um eine einzelne Anwendung, wie Sie Ihre Silverlight-basierte Anwendung kann zu propagieren.

Windows 7 unterstützt Multitouch-Eingabe auf der Ebene des Betriebssystems. Dies ist zum Teil durch eine Meldung (unterstützt WM_TOUCH ). Bereits auf dieser Ebene, bietet das Betriebssystem eine Förderung der Multitouch-Nachrichten an Meldungen von der Maus. Die Förderung ist vorhanden, so dass Multitouch Nutzern Touch und Gesten verwenden können, um wie Mausbewegungen oder Mausklicks ersetzen. Dies ist nützlich bei der Interaktion mit Anwendungen, die möglicherweise nicht berühren-aware, und die Anwendung wird alle seine räumliche Input-Verarbeitung durch Mausereignisse und Meldungen. Windows 7 auch verschmilzt die Nachrichten bei Bedarf, so dass Anwendungen nicht zu einem Überlauf des Zwischen-Nachrichten zu verarbeiten, dass alle inkrementellen Ereignisse zu generieren.

Internet Explorer Version 8 als Browser-Host ist auch Multitouch bewusst. Internet Explorer Version 8 nach vorne Plattform Multitouch-Nachrichten an Plug-Ins wie Silverlight, die im Internet Explorer ausgeführt werden, so dass Silverlight-Anwendungen können mit Multitouch-Eingabe zu interagieren.

Multitouch Input für Silverlight (gezeigt für IE8-Host)

Multitouch Input and Platform Input in Silverlight

Multitouch ist auch für Silverlight in aktuellen Versionen von Firefox Rechner in Windows 7 unterstützt, und für den Out-of-Browser-Anwendungen auf Windows 7. Allerdings ist multitouch-Eingang nicht für Anwendungen, die in unterstützt Vollbild- Modus.

Die Registrierung für Multitouch

Als Teil der breiteren Plattform-Architektur für Multitouch, muss jede Anwendung, die Multitouch-Nachrichten empfangen möchte Register seiner HWND (Touch-API für Windows 7 enthält RegisterTouchWindow für diesen Zweck). Die Silverlight 4 Laufzeit kümmert sich um diese Registrierung Schritt und registriert Silverlight als Laufzeitumgebung und alle Anwendungen, die Silverlight nutzen, wobei die Laufzeit. Deshalb ist es im Allgemeinen nicht erforderlich, um direkt mit Plattform-Code Multitouch Input-Verfahren. Allerdings sind die Eigenschaften des Multitouch-Interaktion im Touch-API für Windows 7 und Silverlight 4 multitouch ziemlich spezifisch:

  • Silverlight 4 ist für Roh-Touch-Eingabe, nicht Gesten registriert. Wenn Ihre Anforderungen Gesten gehören, müssen Sie Touch-Eingabe in Gesten mit Ihrem eigenen Anwendungscode Prozess, im Rahmen der Silverlight. Alternativ können Sie eine größere Interoperabilität so zu gestalten, dass Sie einen separaten HWND, dass Multitouch-Gesten für von der Plattform registriert ist, können gehören, und arbeitet mit einer Silverlight-Content-Bereich.

  • In der Regel fördert Silverlight 4 rohe Touch-Eingabe auf Mausereignisse. (Allerdings auf einer Pro-touchframe Basis, können Sie sie deaktivieren Förderung, wie es in den nächsten Abschnitten dieses Themas beschrieben.)

  • Innerhalb eines Host könnten bestimmte Gesten, die vom Browser Host gefördert werden, um andere Ereignisse als mousedown / mousemove / mouseup geworden.

Promotion zum Maus-Events

Maus Event-Promotion existiert, so dass Multitouch Nutzern Touch und Gesten verwenden können, um wie Mausbewegungen oder Mausklicks ersetzen. Konzeptionell ist dies der Standard, da Anwendungen, oder predate nicht berücksichtigen Multitouch wüsste nicht, was API aufrufen, um die Förderung durchzuführen, und damit die Plattform funktioniert die Maus Förderung in den meisten Fällen. Silverlight 4 perpetuiert das allgemeine Konzept der Maus Event-Promotion für den gleichen Gründen. Jedes beliebige bestehende Silverlight-Steuerelement haben könnte Handler für Mausereignisse, aber nicht speziell für Multitouch-Ereignisse. Zum Beispiel würde eine Taste zu erwarten, zu handeln, als ob geklickt, wenn der Benutzer verwendet ein Multitouch-Gerät, mit ihm zu interagieren.

Maus Event-Promotion hat das Potenzial für Event-Dualismus in Fällen, in denen bewusste Umgang mit einer Multitouch-Rahmen und seine Berührungspunkte. Im Körper des Handlers für eine Silverlight-Multitouch-Ereignis können Sie den Mauszeiger Event-Promotion für die Dauer des primären touch down auszusetzen. Zum Beispiel, wenn Sie ein Touch-Taste bewusst, dass verschiedene Aktionen basieren auf dem Touch-Eigenschaften durchgeführt erstellen möchten, können Sie aussetzen, die Förderung, so dass Ihre Schaltfläche nicht zu den üblichen "Klick" Verhalten fördern, und ging stattdessen auf Ihre diskrete Logik wie Sie den Eingang zu behandeln. Um dies zu tun, rufen Sie SuspendMousePromotionUntilTouchUp als einer der ersten Operationen der Handler.

Die genaue Art der Maus Förderung ist nicht hier, dokumentiert, weil es eine Plattform charakteristisch ist. Generell ist der Mechanismus, eine Nachricht zu Nachricht Förderung.

Tippen Sie auf Gesture

Silverlight Prozesse Multitouch-Nachrichten auf der Ebene der Roh-Nachricht, analog zu der Plattform WM_TOUCH, zusammen mit Zugang zu anderen APIs, die Touchpoint Eigenschaften bei, dass rohes Ebene, die dann als Silverlight APIs ausgesetzt sind, erfassen können. Silverlight nicht nativ verarbeiten Touch Gesten, die Plattform-Fähigkeiten in diesem Sinne, oder Prozess WM_GESTURE . (Processing WM_GESTURE würde eine Registrierung Staat mit der Plattform, Silverlight 4 nicht in opt.)

Wenn Sie Multitouch-Prozess mit der Geste Metapher möchten, müssen Sie den Code übernehmen die Touch-Ereignissen und die Nutzung der API unter Silverlight 4 freigelegt und Verfahren in Gesten, mit oder ohne Nutzung der Plattform-API für Gesten. Dies ist nicht trivial.

Touch-API

Ein wichtiger Unterschied zwischen Multitouch-Eingabe und anderen Input-Techniken in Silverlight (Maus, Tastatur, Stift) unterstützt wird, die Sie für Multitouch-Ereignisse über einen Antrag breiten Basis zu registrieren, nicht durch Hinzufügen von Handlern auf bestimmte Eingabe-Elemente ( UIElement Objekte). Dies steht im Einklang mit der Metapher, dass Silverlight als Ganzes das "application" mit der Plattform registriert ist.

  • So weisen Sie ein Multitouch-Event-Handler, weisen Sie einen Handler für das statische Ereignis Touch.FrameReported . System.Windows.Input.Touch ist eine statische Service-Klasse, die nur existiert zu diesem Zweck mit Touch.FrameReported als einziges API.

  • Der Handler schreiben Sie für Touch.FrameReported basiert auf der TouchFrameEventHandler delegieren.

  • In einem typischen Design der Benutzeroberfläche, müssen Sie eventuell Bereiche der Benutzeroberfläche, die Sie beabsichtigen, spezifische Multitouch-Aktionen innerhalb und in anderen Bereichen, wo es besser wäre, Maus Förderung nutzen und nicht unbedingt Prozess die Eingabe als Multitouch-Unterstützung. Um festzustellen, wo der primäre Berührungspunkt ist, müssen Sie eventuell die gesamte Koordination gegen den Standort Ihres multitouch-fähigen Element und seine Grenzen zu bewerten. Siehe GetPrimaryTouchPoint für weitere Informationen und Beispiel-Code.

  • Wie bereits erwähnt, können Sie mit der Maus Event-Promotion als Teil Ihrer auszusetzen TouchFrameEventHandler Logik. Um dies zu tun, rufen Sie SuspendMousePromotionUntilTouchUp als einer der ersten Operationen.

  • Touch-Nachrichten zu Silverlight 4 gemeldet werden typischerweise als Rahmen, die mit einem primären "down" Touch-Point start. Manchmal bist du nur in den ersten Berührungspunkt interessiert und die erste "up" Aber der Rahmen können auch andere Berührungspunkte und "move"-Aktionen enthalten. Zum Zugriff auf die komplette Sammlung von Punkten in einem Frame in Ihrem Handler, rufen GetTouchPoints . Für eine gegebene Berührungspunkt, der wohl wichtigste Information ist seine Position .

  • Andere APIs aussetzen Informationen, die in der Plattform-API wäre in der TOUCHINPUT Struktur gefunden werden. Beispiele für solche API sind: TouchFrameEventArgs.Timestamp ; TouchDevice.DirectlyOver ; TouchPoint.Size ; TouchPoint.TouchDevice . Abhängig von Ihrem Szenario können Sie nicht immer das Niveau der Informationssicherheit.

Manipulation API in Silverlight Version 4

Die Silverlight 4 UIElement Klasse verfügt über mehrere Ereignisse im Zusammenhang mit Manipulationen, sowie Event-Support-Klassen wie ManipulationStartedEventArgs . Allerdings sind diese APIs und die damit verbundene Manipulation Konzepte nicht die volle Unterstützung unter Silverlight 4 zur Laufzeit. Um diese Ereignisse, muss Ihre Anwendung werden gezielt Silverlight für Windows Phone. Die Veranstaltungen gibt es in der Silverlight 4 Baugruppen, um gemeinsame Designer Unterstützung sowohl für Silverlight 4 und Silverlight für Windows Phone bieten.

    Silverlight für Windows Phone 7

Gesture Unterstützung bei der Silverlight-Framework

Für eine vollständige Liste der unterstützten Windows Phone Silverlight Gesten finden Sie in der UI Design und Interaction-Führer .

Silverlight für Windows Phone ermöglicht es Ihnen, Touch-Eingabe, indem Sie Manipulation Ereignisse zu verarbeiten. Durch die Verwendung dieser Ereignisse können Sie verschieben und skalieren Objekte in Reaktion auf Touch-und Multi-Touch-Eingabe. Die Veranstaltungen sind in der folgenden Tabelle beschrieben.


Veranstaltung

Beschreibung

ManipulationStarted

Dieses Ereignis tritt ein, wenn der Benutzer startet eine direkte Manipulation, indem sie ihre Finger oder Finger auf dem Bildschirm.

ManipulationDelta

Dieses Ereignis tritt immer wieder, während der Benutzer sich bewegt ihre Finger oder Finger auf dem Bildschirm.

ManipulationCompleted

Dieses Ereignis tritt ein, wenn der Benutzer seinen Finger oder Finger vom Bildschirm entfernt

Note Hinweis:

Silverlight-Steuerelemente, die auf Windows Phone unterstützt werden, sind Gesten bewusst und unterstützen Gesten wie Tippen, Pan und Flick. Du kannst mit einfachen Gesten wie Tippen, tippen Sie doppelt auf, und mit Maus-Events tippen und halten. Weitere Informationen finden Sie in den Eingang für Windows Phone Thema.

Gesture Unterstützung bei der XNA Framework

Das XNA Framework bietet eine robuste Touch-Gesten für die Entwicklung von Anwendungen. Entwickler können diese integrierten Geste System statt der Umsetzung von Grund auf. Die folgenden XNA Gesten sind in Windows Phone unterstützt.


GestureType

Beschreibung

Hahn

Ein Finger den Bildschirm berührt und Releases.

DoubleTap

Diese Geste stellt zwei Hähnen in Folge.

Halten

Ein Finger den Bildschirm berührt und hält sie in Platz für einen kurzen Zeitraum.

FreeDrag

Ein Finger den Bildschirm berührt und bewegt sich in eine beliebige Richtung.

VerticalDrag

Ein Finger den Bildschirm berührt und bewegt sich in einer nach oben oder unten Richtung.

HorizontalDrag

Ein Finger den Bildschirm berührt und bewegt sich in eine linke oder rechte Richtung.

DragComplete

Markiert das Ende eines FreeDrag, VerticalDrag oder HorizontalDrag Geste.

Film

Ein Finger zieht quer über den Bildschirm und setzt sich ohne Unterbrechung angehoben.

Prise

Zwei Finger auf dem Bildschirm drücken und sich bewegen.

PinchComplete

Diese Geste markiert das Ende einer Pinch-Geste.

Die folgende Liste enthält nützliche Themen und Artikel für die Umsetzung Gesten in ein XNA-Anwendung: