Touch Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit un service au niveau de l'application qui traite l'entrée tactile multipoint du système d'exploitation et déclenche l'événement FrameReported.
public ref class Touch abstract sealed
public static class Touch
type Touch = class
Public Class Touch
- Héritage
-
Touch
Exemples
L’exemple suivant vous permet de créer des modèles simples sur un Canvas en faisant glisser deux doigts sur un écran tactile. Chaque touche est représentée par un TouchDevice. Le modèle est créé en dessinant une ligne entre les points tactiles fournis par les touches. Cet exemple nécessite un écran compatible avec Windows Touch.
Le balisage suivant crée l’interface utilisateur, qui se compose d’un Canvas qui est centré dans un Grid.
<Window x:Class="WpfTouchFrameSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="525" Width="525">
<Grid>
<Canvas x:Name="canvas1"
Width="500" Height="500"
Background="Black" />
</Grid>
</Window>
Le code suivant gère l’événement FrameReported . Lorsqu’une touche appuie sur , Canvasle TouchDevice est capturé dans .Canvas Lorsque la touche est levée, le TouchDevice est libéré. Lorsqu’un contact tactile se déplace sur , Canvasest Id coché. Si le déplacement provient du premier contact, son emplacement est enregistré. Si le mouvement provient de la deuxième touche, une ligne est dessinée de la position de la première touche à la position de la deuxième touche.
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
namespace WpfTouchFrameSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
// Variables for tracking the position of two points.
Point pt1, pt2 = new Point();
public MainWindow()
{
InitializeComponent();
Touch.FrameReported += new TouchFrameEventHandler(Touch_FrameReported);
}
void Touch_FrameReported(object sender, TouchFrameEventArgs e)
{
if (this.canvas1 != null)
{
foreach (TouchPoint _touchPoint in e.GetTouchPoints(this.canvas1))
{
if (_touchPoint.Action == TouchAction.Down)
{
// Clear the canvas and capture the touch to it.
this.canvas1.Children.Clear();
_touchPoint.TouchDevice.Capture(this.canvas1);
}
else if (_touchPoint.Action == TouchAction.Move && e.GetPrimaryTouchPoint(this.canvas1) != null)
{
// This is the first (primary) touch point. Just record its position.
if (_touchPoint.TouchDevice.Id == e.GetPrimaryTouchPoint(this.canvas1).TouchDevice.Id)
{
pt1.X = _touchPoint.Position.X;
pt1.Y = _touchPoint.Position.Y;
}
// This is not the first touch point. Draw a line from the first point to this one.
else if (_touchPoint.TouchDevice.Id != e.GetPrimaryTouchPoint(this.canvas1).TouchDevice.Id)
{
pt2.X = _touchPoint.Position.X;
pt2.Y = _touchPoint.Position.Y;
Line _line = new Line();
_line.Stroke = new RadialGradientBrush(Colors.White, Colors.Black);
_line.X1 = pt1.X;
_line.X2 = pt2.X;
_line.Y1 = pt1.Y;
_line.Y2 = pt2.Y;
_line.StrokeThickness = 2;
this.canvas1.Children.Add(_line);
}
}
else if (_touchPoint.Action == TouchAction.Up)
{
// If this touch is captured to the canvas, release it.
if (_touchPoint.TouchDevice.Captured == this.canvas1)
{
this.canvas1.ReleaseTouchCapture(_touchPoint.TouchDevice);
}
}
}
}
}
}
}
Class MainWindow
' Variables for tracking the position of two points.
Private pt1, pt2 As Point
Public Sub New()
InitializeComponent()
AddHandler Touch.FrameReported, AddressOf Touch_FrameReported
End Sub
Private Sub Touch_FrameReported(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchFrameEventArgs)
If (canvas1 IsNot Nothing) Then
For Each _touchPoint In e.GetTouchPoints(Me.canvas1)
If _touchPoint.Action = TouchAction.Down Then
' Clear the canvas and capture the touch to it.
canvas1.Children.Clear()
_touchPoint.TouchDevice.Capture(canvas1)
ElseIf _touchPoint.Action = TouchAction.Move Then
' This is the first (primary) touch point. Just record its position.
If _touchPoint.TouchDevice.Id = e.GetPrimaryTouchPoint(Me.canvas1).TouchDevice.Id Then
pt1.X = _touchPoint.Position.X
pt1.Y = _touchPoint.Position.Y
' This is not the first touch point; draw a line from the first point to this one.
ElseIf _touchPoint.TouchDevice.Id <> e.GetPrimaryTouchPoint(Me.canvas1).TouchDevice.Id Then
pt2.X = _touchPoint.Position.X
pt2.Y = _touchPoint.Position.Y
Dim _line As New Line()
_line.Stroke = New RadialGradientBrush(Colors.White, Colors.Black)
_line.X1 = pt1.X
_line.X2 = pt2.X
_line.Y1 = pt1.Y
_line.Y2 = pt2.Y
_line.StrokeThickness = 2
Me.canvas1.Children.Add(_line)
End If
ElseIf _touchPoint.Action = TouchAction.Up Then
' If this touch is captured to the canvas, release it.
If (_touchPoint.TouchDevice.Captured Is canvas1) Then
canvas1.ReleaseTouchCapture(_touchPoint.TouchDevice)
End If
End If
Next
End If
End Sub
End Class
Remarques
L’événement FrameReported est inclus dans Windows Presentation Foundation (WPF) pour prendre en charge la compatibilité avec Silverlight. Si vous n’avez pas besoin de garantir la compatibilité avec Silverlight, utilisez les événements tactiles, tels que TouchDown et TouchMove, sur UIElement, UIElement3Dou ContentElement.
L’événement FrameReported n’utilise pas le même modèle d’événement que d’autres événements d’entrée WPF, tels que TouchDown et TouchMove. Au lieu d’être exposé en tant qu’événement spécifique à un élément qui est potentiellement acheminé dans l’arborescence d’objets d’une interface utilisateur, l’événement FrameReported est un événement unique qui est géré au niveau de l’application. Par conséquent, vous ne pouvez pas utiliser le sender
paramètre du gestionnaire d’événements pour déterminer l’élément touché.
Utilisez pour TouchFrameEventArgs obtenir les TouchPoint valeurs pertinentes pour l’événement tactile. À partir de , TouchPointvous pouvez obtenir le Position de la touche tactile et déterminer si le TouchAction était une Downaction , Moveou Up . Vous pouvez également utiliser pour TouchPoint obtenir le TouchDevice. À partir de , TouchDevicevous pouvez déterminer l’appareil Id et obtenir des informations sur l’élément touché.
Événements
FrameReported |
Se produit lorsqu'un message tactile est envoyé. |