Soutien Touch dans WPF
Ce post est une légère modification du Touch et de manipulation sur le site MSDN, comme un aperçu rapide et de référence pour moi sur le soutien tactile WPF.
Aperçu
Nouveau matériel et de l'API dans le système d'exploitation Windows 7 de fournir des applications la capacité de recevoir les commentaires des touches multiples simultanément. WPF permet aux applications de détecter et de répondre au toucher d'une manière similaire à répondre à d'autres intrants, tels que la souris ou le clavier, en déclenchant des événements lorsqu'ils touchent survient.
WPF expose deux types d'événements où se touchent: événements de toucher et d'événements de manipulation. Événements de toucher fournir des données brutes sur chaque doigt sur un écran tactile et son mouvement. Manipulation des événements interprètent l'entrée comme certaines actions.
Prérequis
Vous avez besoin des composants suivants pour développer une application qui répond au toucher.
- Microsoft Visual Studio 2010.
- Windows 7.
- Un dispositif, tel qu'un écran tactile, qui supporte Windows Touch.
WPF expose deux types d'événements où se touchent: événements de toucher et d'événements de manipulation. Événements de toucher fournir des données brutes sur chaque doigt sur un écran tactile et son mouvement. Manipulation des événements interprètent l'entrée comme certaines actions.
Terminologie
Les termes suivants sont utilisés lorsque le toucher est discuté.
- Touch est un type d'entrée utilisateur qui est reconnu par Windows 7. Habituellement, le toucher est initiée en mettant les doigts sur un écran tactile. Notez que les périphériques tels qu'un touchpad qui est commun sur les ordinateurs portables ne supportent pas les toucher si l'appareil convertit simplement la position du doigt et le mouvement comme la souris d'entrée.
- Multitouch est tactile qui se produit de plus d'un point simultanément. Windows 7 et WPF prend en charge le multitouch. Chaque fois que le toucher est discuté dans la documentation pour WPF, les concepts s'appliquent à multitouch.
- Une manipulation se produit lorsque le toucher est interprétée comme une action physique qui est appliquée à un objet. Dans WPF, les événements de manipulation interprètent l'entrée comme une traduction, l'expansion ou la manipulation de rotation.
- Un appareil tactile représente un appareil qui produit une entrée tactile, comme un seul doigt sur un écran tactile.
Les contrôles qui répondent au toucher
Les contrôles suivants peuvent défiler en faisant glisser un doigt sur la commande si elle a un contenu qui défile hors de vue.
- Le ScrollViewer définit les ScrollViewer.PanningMode propriété attachée qui vous permet de spécifier si le panoramique tactile est activé horizontalement, verticalement, deux, ou aucune. Le ScrollViewer.PanningDeceleration propriété spécifie la rapidité du défilement ralentit lorsque l'utilisateur lève le doigt de l'écran tactile. Le ScrollViewer.PanningRatio propriété attachée spécifie le ratio de défilement compensée pour traduire la manipulation de décalage.
Diagramme de classes
Voici le diagramme de classes souligne les catégories clés et de leurs membres pour le soutien toucher:
- Tactile
- Des événements tactile sont exposés à la fois par UIElement , UIElement3D et ContentElement que les événements bouillonnants, et via tactile . FrameReported comme événement de niveau applicatif (pour être compatible avec Silverlight).
- Bien que les événements se poser, se déplacer et plus sont deux tunnels et bouillonnant, le toucher événements Enter et Leave sont bouillonne seulement.
- Dispositif de capture Touch est explicite via UIElement . CaptureTouch méthode.
- Évènements tactiles sont synchrones.
- Événements de toucher sont toujours tirés, si les événements de manipulation sont licenciés ou non.
- WPF prend en charge le multitouch.
- La manipulation
- Manipulation des événements sont exposées par UIElement que bouillonnement d'événement uniquement.
- Manipulation des événements sont tirés sur un UIElement seulement son IsManipulationEnabled est vrai.
- Manipulation des événements sont synchrones.
- WPF prend en charge trois types de manipulation: l'expansion et la rotation (y compris la rotation seul doigt avec point de pivot), et l'inertie.
- Dispositif de capture tactile est implicite à la manipulation.
- Classe statique Manipulation contient des méthodes pour obtenir et mettre à jour les paramètres de la manipulation en dehors de gestionnaires d'événements de manipulation. Il contient également des méthodes pour l'utilisation plus avancée de la logique de manipulation, comme l'ajout d'ajout et la suppression des manipulateurs.
- WPF prend en charge les gestes multiples.
- WPF ne prend pas en charge les gestes, ou la manipulation 3D.
- ScrollViewer a un support intégré pour la manipulation et l'inertie, et il est personnalisable par les applications.
Tactile
Evénements tactile
Les classes de base, UIElement , UIElement3D et ContentElement , définir les événements que vous pouvez vous abonner à votre demande ne sera donc répondre au toucher. Évènements tactiles sont utiles lorsque votre application interprète tactile comme autre chose que de manipuler un objet. Par exemple, une application qui permet à un utilisateur de dessiner avec un ou plusieurs doigts souscrirait à toucher des événements.
Tous les trois classes de définir les événements suivants, qui se comportent de même, quelle que soit la classe de définition.
- TouchDown
- TouchMove
- Retouche
- TouchEnter
- TouchLeave
- PreviewTouchDown
- PreviewTouchMove
- PreviewTouchUp
- GotTouchCapture
- LostTouchCapture
Comme les événements du clavier et la souris, les événements de toucher sont des événements routés. Les événements qui commencent avec Aperçu des événements de tunnels et les événements qui commencent avec le Touch sont bouillonnement des événements. Lorsque vous manipulez ces événements, vous pouvez obtenir la position de l'entrée, par rapport à n'importe quel élément, en appelant le GetTouchPoint ou GetIntermediateTouchPoints méthode.
Le chemin d'exécution des événements tactile
Pour comprendre l'interaction entre les événements de toucher, considérons le scénario où un utilisateur met un doigt sur un élément, déplace le doigt dans l'élément, puis lève le doigt de l'élément. L'illustration suivante montre l'exécution des événements bouillonnement (les événements de tunneling sont omis pour plus de simplicité).
La liste suivante décrit la séquence des événements dans l'illustration précédente. 
Le TouchEnter événement se produit une seule fois lorsque l'utilisateur place son doigt sur l'élément.
Le TouchDown événement se produit une seule fois.
Le TouchMove événement se produit plusieurs fois que l'utilisateur passe le doigt dans l'élément.
La Retouche événement se produit une seule fois lorsque l'utilisateur lève le doigt de l'élément.
Le TouchLeave événement se produit une seule fois.
Lorsque plus de deux doigts sont utilisés, les événements se produisent pour chaque doigt.
Manipulation et inertie
Événements de manipulation
Pour les cas où une application permet à un utilisateur de manipuler un objet, le UIElement classe définit les événements de manipulation. Contrairement aux événements de toucher que le simple rapport de la position du toucher, les événements de manipulation rapport comment l'entrée peut être interprété. Il ya trois types de manipulations, de la traduction, l'expansion, et la rotation. La liste suivante décrit comment invoquer les trois types de manipulations.
Mettez un doigt sur un objet et déplacez le doigt sur l'écran tactile pour invoquer une manipulation traduction. Ce déplace habituellement l'objet.
Mettez deux doigts sur un objet et bouger les doigts rapprocher ou plus éloignés les uns des autres pour invoquer une manipulation d'expansion. Ce redimensionne généralement l'objet.
Mettez deux doigts sur un objet et faire pivoter les doigts autour de l'autre pour appeler une manipulation de rotation. Ce tourne habituellement l'objet.
Plus d'un type de manipulation peut se produire simultanément.
Lorsque vous causer des objets pour répondre à des manipulations, vous pouvez avoir l'objet semblent avoir inertie. Cela peut rendre vos objets de simuler le monde physique. Par exemple, lorsque vous poussez un livre sur une table, si vous poussez suffisamment fort le livre continuera à se déplacer après que vous relâchez-le. WPF vous permet de simuler ce comportement en déclenchant des événements manipulation après doigts de l'utilisateur libère l'objet.
Pour plus d'informations sur la façon de créer une application qui permet à l'utilisateur de se déplacer, redimensionner et faire pivoter un objet, voir Procédure pas à pas: création de votre application First Touch .
Le UIElement définit les événements suivants de manipulation.
Par défaut, un UIElement ne reçoit pas ces événements de manipulation. Pour recevoir des événements de manipulation sur un UIElement , mis UIElement.IsManipulationEnabled à true.
Le chemin d'exécution des événements de manipulation
Imaginez un scénario où un utilisateur "jette" un objet. L'utilisateur met le doigt sur l'objet, déplace le doigt sur l'écran tactile pour une courte distance, et ensuite la lève le doigt alors qu'il est en mouvement. Le résultat de ceci est que l'objet se déplace sous le doigt de l'utilisateur et de continuer à se déplacer après que l'utilisateur lève le doigt.
L'illustration suivante montre le chemin d'exécution d'événements de manipulation et des informations importantes sur chaque événement.
Manipulation des événements

La liste suivante décrit la séquence des événements dans l'illustration précédente.
Le ManipulationStarting événement se produit lorsque l'utilisateur place son doigt sur l'objet. Entre autres choses, cet événement vous permet de définir l' ManipulationContainer propriété. Dans la suite des événements, la position de la manipulation sera relatif à l' ManipulationContainer . Dans les épreuves autres que ManipulationStarting , cette propriété est en lecture seule, donc la ManipulationStarting événement est le seul moment que vous pouvez définir cette propriété.
Le ManipulationStarted événement survient prochaine. Cet événement rapports à l'origine de la manipulation.
Le ManipulationDelta événement se produit plusieurs fois que les doigts d'un utilisateur de passer d'un écran tactile. Le DeltaManipulation propriété de la ManipulationDeltaEventArgs classe indique si la manipulation est interprété comme un mouvement, l'expansion ou la traduction. C'est là où vous effectuez la plupart du travail de manipulation d'un objet.
Le ManipulationInertiaStarting événement se produit lorsque les doigts de l'utilisateur perd le contact avec l'objet. Cet événement vous permet de spécifier la décélération des manipulations lors de l'inertie. Il en est ainsi votre objet peut émuler différents espaces physiques ou d'attributs, si vous choisissez. Par exemple, supposons que votre application possède deux objets qui représentent des éléments dans le monde physique, et on est plus lourd que l'autre. Vous pouvez rendre l'objet plus lourd décélérer plus vite que le briquet objet.
Le ManipulationDelta événement se produit plusieurs fois que l'inertie survient. Notez que cet événement se produit lorsque les doigts de l'utilisateur déplacer à travers l'écran tactile et quand WPF simule l'inertie. En d'autres termes, ManipulationDelta survient avant et après la ManipulationInertiaStarting événement. Le ManipulationDeltaEventArgs.IsInertial rapports de propriété si le ManipulationDelta événement se produit pendant l'inertie, de sorte que vous pouvez vérifier que la propriété et effectuer des actions différentes, en fonction de sa valeur.
Le ManipulationCompleted événement se produit lorsque la manipulation et toute inertie extrémités. C'est, après tout le ManipulationDelta événements se produisent, le ManipulationCompleted événement se produit pour signaler que la manipulation est terminée.
Commentaires Boundary
Le UIElement définit également les ManipulationBoundaryFeedback événement. Cet événement survient lorsque l' ReportBoundaryFeedback méthode est appelée dans le ManipulationDelta événement. Le ManipulationBoundaryFeedback événement permet à des applications ou de composants de fournir une rétroaction visuelle quand un objet frappe une frontière. Par exemple, la fenêtre de classe gère l' ManipulationBoundaryFeedback événement pour provoquer la fenêtre à déplacer légèrement lorsque son bord est rencontré.
Promotion de la souris
Vous pouvez annuler la manipulation en appelant le Annuler méthode sur les arguments d'événement en tout cas, la manipulation, sauf ManipulationBoundaryFeedback événement. Lorsque vous appelez Annuler , les événements de manipulation ne sont plus posées et des événements de souris se produire pour le toucher. Le tableau suivant décrit la relation entre le temps de la manipulation est annulée et les événements de souris qui se produisent.
L'événement qui est appelé dans Annuler | Les événements de souris qui se produisent pour l'entrée qui ont déjà eu lieu |
|---|---|
De la souris enfoncé événements. | |
La souris enfoncé et déplacez la souris des événements. | |
De la souris enfoncé, déplacez la souris et la souris jusqu'à des événements. |
Notez que si vous appelez Annuler lorsque la manipulation est dans l'inertie, la méthode retourne false et l'entrée ne déclenche pas d'événements de souris.
La relation entre les événements Touch et Manipulation
Un UIElement pouvez toujours recevoir des événements toucher. Lorsque le IsManipulationEnabled propriété est définie à true, un UIElement peut recevoir à la fois tactile et des événements de manipulation. Si le TouchDown événement n'est pas géré (c'est l' manipulés propriété est fausse), la logique de manipulation capture toucher à l'élément et génère les événements de manipulation. Si le manipulés propriété est définie à true dans le TouchDown événement, la logique de manipulation ne génère pas d'événements de manipulation. L'illustration suivante montre la relation entre les événements de toucher et d'événements de manipulation.
Événements de toucher et la manipulation

La liste suivante décrit la relation entre le toucher et la manipulation des événements qui est montré dans l'illustration précédente.
Lorsque l'appareil génère un premier contact TouchDown événement sur un UIElement , la logique de manipulation des appels de la CaptureTouch méthode, qui génère le GotTouchCapture événement.
Lorsque le GotTouchCapture survient, la logique de manipulation des appels de la Manipulation.AddManipulator méthode, qui génère le ManipulationStarting événement.
Lorsque le TouchMove événements se produisent, la logique de manipulation génère le ManipulationDelta événements qui se produisent avant la ManipulationInertiaStarting événement.
Lorsque l'appareil dernière touche sur l'élément soulève la Retouche événement, la logique de manipulation génère le ManipulationInertiaStarting événement.
Diagramme de classe EventArgs
Voici le diagramme de classes montre tous les toucher et la manipulation EventArgs classes et les types pertinents.








Les commentaires récents