TouchDevice Clase

Definición

Representa una única entrada táctil generada por un dedo en una pantalla táctil.

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
Herencia
Implementaciones

Ejemplos

En el ejemplo siguiente se pueden crear patrones simples en un Canvas elemento arrastrando dos dedos en una pantalla táctil. Cada entrada táctil se representa mediante un TouchDevice objeto en .TouchEventArgs El patrón se crea dibujando una línea entre los puntos táctiles proporcionados por los toques. En este ejemplo se requiere una pantalla compatible con Windows Touch.

El marcado siguiente crea la interfaz de usuario, que consta de un Canvas que se centra en una cuadrícula y adjunta los controladores de eventos para los eventos táctiles.

<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>

El código siguiente controla los eventos táctiles. Cuando se presiona un toque en Canvas, TouchDevice se captura en .Canvas Cuando se levanta el toque, TouchDevice se libera . Cuando un toque se mueve en Canvas, se comprueba .Id Si el movimiento procede del primer toque, se registra su ubicación. Si el movimiento procede del segundo toque, se dibuja una línea desde la posición del primer toque hasta la posición del 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

Comentarios

Normalmente, se accede a mediante TouchDevice la TouchEventArgs.TouchDevice propiedad . TouchDevice Representa un solo toque en una pantalla. Si hay varios toques, utilice la Id propiedad para distinguir entre ellos.

Nota

Esta clase contiene una demanda de herencia en el nivel de clase que se aplica a todos los miembros. Se SecurityException produce una excepción cuando la clase derivada no tiene permiso de plena confianza. Para obtener más información sobre las demandas de seguridad, consulte Link Demand and Inheritance Demand.

Constructores

TouchDevice(Int32)

Se llama desde constructores de clases derivadas para inicializar la clase TouchDevice.

Propiedades

ActiveSource

Obtiene el objeto PresentationSource que proporciona la entrada para este dispositivo.

Captured

Obtiene el elemento que capturó el objeto TouchDevice.

CaptureMode

Obtiene la directiva de captura de TouchDevice.

DirectlyOver

Obtiene el elemento sobre el que está justo encima el punto de contacto táctil.

Dispatcher

Obtiene el objeto Dispatcher al que está asociado DispatcherObject.

(Heredado de DispatcherObject)
Id

Obtiene el identificador único de TouchDevice, tal como lo proporciona el sistema operativo.

IsActive

Obtiene un valor que indica si el dispositivo está activo.

Target

Obtiene el elemento que recibe la entrada desde TouchDevice.

Métodos

Activate()

Agrega TouchDevice al sistema de mensajería de entrada.

Capture(IInputElement)

Captura una entrada táctil en el elemento especificado usando el modo de captura de Element.

Capture(IInputElement, CaptureMode)

Captura una entrada táctil en el elemento especificado usando el CaptureMode indicado.

CheckAccess()

Determina si el subproceso de la llamada tiene acceso a DispatcherObject.

(Heredado de DispatcherObject)
Deactivate()

Quita TouchDevice del sistema de mensajería de entrada.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetIntermediateTouchPoints(IInputElement)

Cuando se invalida en una clase derivada, devuelve los puntos táctiles recopilados entre el evento Touch más reciente y el evento Touch anterior.

GetTouchPoint(IInputElement)

Devuelve la posición actual del dispositivo táctil con respecto al elemento especificado.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OnCapture(IInputElement, CaptureMode)

Se le llama cuando se captura una entrada táctil en un elemento.

OnManipulationEnded(Boolean)

Se le llama cuando finaliza una manipulación.

OnManipulationStarted()

Se le llama cuando se inicia una manipulación.

ReportDown()

Notifica que se ha presionado una entrada táctil en un elemento.

ReportMove()

Notifica que una entrada táctil se está moviendo por un elemento.

ReportUp()

Notifica que una entrada táctil se levantó de un elemento.

SetActiveSource(PresentationSource)

Establece el objeto PresentationSource que notifica la entrada para este dispositivo.

Synchronize()

Fuerza a TouchDevice a sincronizar la interfaz de usuario con los puntos táctiles subyacentes.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
VerifyAccess()

Exige que el subproceso de la llamada tenga acceso a DispatcherObject.

(Heredado de DispatcherObject)

Eventos

Activated

Se produce cuando TouchDevice se agrega al sistema de mensajería de entrada.

Deactivated

Se produce cuando TouchDevice se quita del sistema de mensajería de entrada.

Updated

Se produce cuando se envía un mensaje táctil.

Implementaciones de interfaz explícitas

IManipulator.GetPosition(IInputElement)

Devuelve la posición del objeto IManipulator.

IManipulator.Id

Obtiene el identificador único de TouchDevice, tal como lo proporciona el sistema operativo.

IManipulator.ManipulationEnded(Boolean)

Se produce cuando finaliza una manipulación.

Se aplica a