Compartilhar via


TouchDevice Classe

Definição

Representa uma única entrada de toque produzida por um dedo na tela de toque.

public ref class TouchDevice abstract : System::Windows::Input::InputDevice, System::Windows::Input::IManipulator
public abstract class TouchDevice : System.Windows.Input.InputDevice, System.Windows.Input.IManipulator
type TouchDevice = class
    inherit InputDevice
    interface IManipulator
Public MustInherit Class TouchDevice
Inherits InputDevice
Implements IManipulator
Herança
Implementações

Exemplos

O exemplo a seguir permite que você crie padrões simples em um Canvas arrastando dois dedos em uma tela sensível ao toque. Cada toque é representado por um TouchDevice no TouchEventArgs. O padrão é criado desenhando uma linha entre os pontos de toque fornecidos pelos toques. Este exemplo requer uma tela compatível com o Windows Touch.

A marcação a seguir cria a interface do usuário, que consiste em um Canvas centralizado em uma grade e anexa os manipuladores de eventos para os eventos de toque.

<Window x:Class="WpfTouchEventsSample.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"
                TouchDown="canvas_TouchDown"
                TouchMove="canvas_TouchMove"
                TouchUp="canvas_TouchUp" />
    </Grid>
</Window>

O código a seguir manipula os eventos de toque. Quando um toque é pressionado no Canvas, o TouchDevice é capturado no Canvas. Quando o toque é levantado, o TouchDevice é liberado. Quando um toque se move no Canvas, o Id é verificado. Se a movimentação veio do primeiro toque, sua localização é registrada. Se a movimentação veio do segundo toque, uma linha é desenhada da posição do primeiro toque para a posição do segundo toque.

using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Controls;

namespace WpfTouchEventsSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Variables to track the first two touch points 
        // and the ID of the first touch point.
        private Point pt1, pt2 = new Point();
        private int firstTouchId = -1;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void canvas_TouchDown(object sender, TouchEventArgs e)
        {
            Canvas _canvas = (Canvas)sender as Canvas;
            if (_canvas != null)
            {
                _canvas.Children.Clear();
                e.TouchDevice.Capture(_canvas);

                // Record the ID of the first touch point if it hasn't been recorded.
                if (firstTouchId == -1)
                    firstTouchId = e.TouchDevice.Id;
            }
        }

        private void canvas_TouchMove(object sender, TouchEventArgs e)
        {
            Canvas _canvas = (Canvas)sender as Canvas;
            if (_canvas != null)
            {
                TouchPoint tp = e.GetTouchPoint(_canvas);
                // This is the first touch point; just record its position.
                if (e.TouchDevice.Id == firstTouchId)
                {
                    pt1.X = tp.Position.X;
                    pt1.Y = tp.Position.Y;
                }
                // This is not the first touch point; draw a line from the first point to this one.
                else if (e.TouchDevice.Id != firstTouchId)
                {
                    pt2.X = tp.Position.X;
                    pt2.Y = tp.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;
                    _canvas.Children.Add(_line);
                }
            }
        }

        private void canvas_TouchUp(object sender, TouchEventArgs e)
        {
            Canvas _canvas = (Canvas)sender as Canvas;
            if (_canvas != null && e.TouchDevice.Captured == _canvas)
            {
                _canvas.ReleaseTouchCapture(e.TouchDevice);
            }
        }
    }
}
Class MainWindow
    ' Variables to track the first two touch points 
    ' and the ID of the first touch point.
    Private pt1, pt2 As Point
    Private firstTouchId As Integer = -1
    ' Touch Down
    Private Sub canvas_TouchDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
        Dim _canvas As Canvas = CType(sender, Canvas)
        If (_canvas IsNot Nothing) Then
            _canvas.Children.Clear()
            e.TouchDevice.Capture(_canvas)

            ' Record the ID of the first touch point if it hasn't been recorded.
            If firstTouchId = -1 Then
                firstTouchId = e.TouchDevice.Id
            End If
        End If
    End Sub
    ' Touch Move
    Private Sub canvas_TouchMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
        Dim _canvas As Canvas = CType(sender, Canvas)
        If (_canvas IsNot Nothing) Then
            Dim tp = e.GetTouchPoint(_canvas)
            ' This is the first touch point; just record its position.
            If e.TouchDevice.Id = firstTouchId Then
                pt1.X = tp.Position.X
                pt1.Y = tp.Position.Y

                ' This is not the first touch point; draw a line from the first point to this one.
            ElseIf e.TouchDevice.Id <> firstTouchId Then
                pt2.X = tp.Position.X
                pt2.Y = tp.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
                _canvas.Children.Add(_line)
            End If
        End If
    End Sub
    ' Touch Up
    Private Sub canvas_TouchUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
        Dim _canvas As Canvas = CType(sender, Canvas)
        If (_canvas IsNot Nothing AndAlso e.TouchDevice.Captured Is _canvas) Then
            _canvas.ReleaseTouchCapture(e.TouchDevice)

        End If
    End Sub
End Class

Comentários

Normalmente, você acessa um TouchDevice usando a TouchEventArgs.TouchDevice propriedade . Um TouchDevice representa um único toque em uma tela. Se houver vários toques, use a Id propriedade para distinguir entre eles.

Observação

Essa classe contém uma demanda de herança no nível da classe que se aplica a todos os membros. Um SecurityException é gerado quando a classe derivada não tem permissão de confiança total. Para obter mais informações sobre demandas de segurança, consulte Vincular demandas e demandas de herança.

Construtores

TouchDevice(Int32)

Chamado de construtores em classes derivadas para inicializar a classe TouchDevice.

Propriedades

ActiveSource

Obtém o PresentationSource que está relatando a entrada para este dispositivo.

Captured

Obtém o elemento que capturou o TouchDevice.

CaptureMode

Obtém a política de captura do TouchDevice.

DirectlyOver

Obtém o elemento sobre o qual o ponto de contato de toque é direcionado.

Dispatcher

Obtém o Dispatcher ao qual este DispatcherObject está associado.

(Herdado de DispatcherObject)
Id

Obtém o identificador exclusivo do TouchDevice conforme fornecido pelo sistema operacional.

IsActive

Obtém um valor que indica se o dispositivo está ativo.

Target

Obtém o elemento que recebe entrada do TouchDevice.

Métodos

Activate()

Adiciona o TouchDevice ao sistema de mensagens de entrada.

Capture(IInputElement)

Captura um toque para o elemento especificado usando o modo de captura Element.

Capture(IInputElement, CaptureMode)

Captura um toque para o elemento especificado usando o CaptureMode especificado.

CheckAccess()

Determina se o thread de chamada tem acesso a este DispatcherObject.

(Herdado de DispatcherObject)
Deactivate()

Remove o TouchDevice do sistema de mensagens de entrada.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetIntermediateTouchPoints(IInputElement)

Quando substituído em uma classe derivada, retorna todos os pontos de toque coletados entre os eventos de toque mais recentes e anteriores.

GetTouchPoint(IInputElement)

Retorna a posição atual do dispositivo de toque em relação ao elemento especificado.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
OnCapture(IInputElement, CaptureMode)

Chamado quando um toque é capturado para um elemento.

OnManipulationEnded(Boolean)

Chamado quando uma manipulação terminou.

OnManipulationStarted()

Chamado quando uma manipulação é iniciada.

ReportDown()

Relata que um toque é pressionado em um elemento.

ReportMove()

Relata um toque está se movendo em um elemento.

ReportUp()

Relata que um toque foi removido de um elemento.

SetActiveSource(PresentationSource)

Define o PresentationSource que está relatando a entrada para este dispositivo.

Synchronize()

Força o TouchDevice a sincronizar a interface do usuário com os pontos de contato subjacentes.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
VerifyAccess()

Impõe que o thread de chamada tenha acesso a este DispatcherObject.

(Herdado de DispatcherObject)

Eventos

Activated

Ocorre quando o TouchDevice é adicionado ao sistema de mensagens de entrada.

Deactivated

Ocorre quando o TouchDevice é removido do sistema de mensagens de entrada.

Updated

Ocorre quando uma mensagem de toque é enviada.

Implantações explícitas de interface

IManipulator.GetPosition(IInputElement)

Retorna a posição do objeto IManipulator.

IManipulator.Id

Obtém o identificador exclusivo do TouchDevice conforme fornecido pelo sistema operacional.

IManipulator.ManipulationEnded(Boolean)

Ocorre quando uma manipulação terminou.

Aplica-se a