Touch Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece um serviço ao nível da aplicação que processa entrada multitouch do sistema operativo e gera o FrameReported evento.
public ref class Touch abstract sealed
public static class Touch
type Touch = class
Public Class Touch
- Herança
-
Touch
Exemplos
O exemplo seguinte permite-lhe criar padrões simples arrastando Canvas dois dedos por um ecrã tátil. Cada toque é representado por um TouchDevice. O padrão é criado desenhando uma linha entre os pontos de contacto fornecidos pelos toques. Este exemplo requer um ecrã compatível com Windows Touch.
A marcação seguinte cria a interface do utilizador, que consiste num Canvas que está centrado num 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>
O código seguinte trata do FrameReported evento. Quando um toque pressiona o Canvas, o TouchDevice é capturado no Canvas. Quando o toque é levantado, é TouchDevice libertado. Quando um toque se move através do Canvas, o Id é verificado. Se o movimento veio do primeiro toque, a sua localização é registada. Se o movimento veio do segundo toque, traça-se uma linha da posição do primeiro toque até à posição do segundo toque.
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
Observações
O evento FrameReported está incluído em Windows Presentation Foundation (WPF) para suportar compatibilidade com o Silverlight. Se não tiver de garantir compatibilidade com o Silverlight, use os eventos de toque, como e , em TouchDown, , TouchMove, ou UIElement.UIElement3DContentElement
O evento FrameReported não utiliza o mesmo modelo de eventos que outros eventos de entrada WPF, como TouchDown e TouchMove. Em vez de ser exposto como um evento específico de um elemento que potencialmente encaminha através da árvore de objetos de uma interface, o FrameReported evento é um único evento que é tratado ao nível da aplicação. Portanto, não pode usar o sender parâmetro do gestor de eventos para determinar que elemento é tocado.
Use o TouchFrameEventArgs para obter os TouchPoint valores relevantes para o evento de toque. A partir do TouchPoint, pode obter o Position do toque e determinar se foi TouchAction um Down, Move, ou Up uma ação. Também pode usar o TouchPoint para obter o TouchDevice. A partir do TouchDevice, pode determinar o dispositivo Id e obter informações sobre o elemento que é tocado.
evento
| Name | Description |
|---|---|
| FrameReported |
Ocorre quando uma mensagem de toque é enviada. |