Sdílet prostřednictvím


TouchDevice Třída

Definice

Představuje jeden dotykový vstup vytvořený prstem na dotykové obrazovce.

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
Dědičnost
Implementuje

Příklady

Následující příklad umožňuje vytvářet jednoduché vzory na obrazovce Canvas přetažením dvou prstů na dotykové obrazovce. Každý dotyk je reprezentován v sadě TouchDeviceTouchEventArgs. Vzor je vytvořen nakreslením čáry mezi dotykovými body, které jsou poskytovány dotyky. Tento příklad vyžaduje obrazovku kompatibilní s dotykovým ovládáním Windows.

Následující kód vytvoří uživatelské rozhraní, které se skládá ze Canvas středu v mřížce a připojí obslužné rutiny událostí pro dotykové události.

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

Následující kód zpracovává dotykové události. Při stisknutí dotyku Canvasna , TouchDevice je zachycen na Canvas. Když je dotyk zvednut, uvolní se TouchDevice . Když se dotyk přesune na Canvastlačítko , je zaškrtnuté Id . Pokud přesun pochází z prvního dotyku, jeho umístění se zaznamená. Pokud pohyb pochází z druhého dotyku, je čára nakreslena z pozice prvního dotyku na pozici druhého dotyku.

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

Poznámky

Obvykle k této TouchEventArgs.TouchDevice vlastnosti přistupujeteTouchDevice. A TouchDevice představuje jeden dotyk na obrazovce. Pokud je k dispozici více dotyků, použijte Id vlastnost k rozlišení mezi nimi.

Poznámka:

Tato třída obsahuje požadavek dědičnosti na úrovni třídy, která se vztahuje na všechny členy. Vyvolá SecurityException se, když odvozená třída nemá oprávnění k úplnému důvěryhodnosti. Další informace o požadavcích zabezpečení najdete v tématu Požadavky na propojení a požadavky dědičnosti.

Konstruktory

Name Description
TouchDevice(Int32)

Volána z konstruktorů v odvozených třídách k inicializaci TouchDevice třídy.

Vlastnosti

Name Description
ActiveSource

PresentationSource Získá vstup, který hlásí pro toto zařízení.

Captured

Získá prvek, který zachytil TouchDevice.

CaptureMode

Získá zachytávání zásady TouchDevice.

DirectlyOver

Získá prvek, který kontaktní bod dotyku je přímo nad.

Dispatcher

Dispatcher Získá toto DispatcherObject je přidružené.

(Zděděno od DispatcherObject)
Id

Získá jedinečný identifikátor , TouchDevicejak poskytuje operační systém.

IsActive

Získá hodnotu, která označuje, zda je zařízení aktivní.

Target

Získá prvek, který přijímá vstup z TouchDevice.

Metody

Name Description
Activate()

TouchDevice Přidá systém pro zadávání zpráv.

Capture(IInputElement, CaptureMode)

Zachytí dotyk zadaného prvku pomocí zadaného CaptureModeprvku .

Capture(IInputElement)

Zachytí dotyk zadaného prvku pomocí Element režimu zachycení.

CheckAccess()

Určuje, zda volající vlákno má přístup k tomuto DispatcherObject.

(Zděděno od DispatcherObject)
Deactivate()

Odebere TouchDevice ze vstupního systému zasílání zpráv.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetIntermediateTouchPoints(IInputElement)

Při přepsání v odvozené třídě vrátí všechny dotykové body, které se shromažďují mezi nejnovějšími a předchozími dotykovými událostmi.

GetTouchPoint(IInputElement)

Vrátí aktuální pozici dotykového zařízení vzhledem k zadanému prvku.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
OnCapture(IInputElement, CaptureMode)

Volá se při zachycení dotyku k prvku.

OnManipulationEnded(Boolean)

Volá se, když skončila manipulace.

OnManipulationStarted()

Volá se při spuštění manipulace.

ReportDown()

Sestavy, které je na prvku stisknuto dotykem

ReportMove()

Zaznamenává, že se dotyk pohybuje přes prvek.

ReportUp()

Sestavy, že byl dotyk zvednul z elementu.

SetActiveSource(PresentationSource)

PresentationSource Nastaví pro toto zařízení vstup, který hlásí.

Synchronize()

Vynutí synchronizaci TouchDevice uživatelského rozhraní s podkladovými dotykovými body.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
VerifyAccess()

Vynucuje, že volající vlákno má přístup k tomuto DispatcherObject.

(Zděděno od DispatcherObject)

Událost

Name Description
Activated

Nastane při TouchDevice přidání do vstupního systému zasílání zpráv.

Deactivated

Nastane, když TouchDevice je odebrán ze vstupního systému zasílání zpráv.

Updated

Nastane, když se odešle dotyková zpráva.

Explicitní implementace rozhraní

Name Description
IManipulator.GetPosition(IInputElement)

Vrátí pozici objektu IManipulator .

IManipulator.Id

Získá jedinečný identifikátor identifikátor, TouchDevice který poskytuje operační systém.

IManipulator.ManipulationEnded(Boolean)

Nastane, když se manipulace ukončila.

Platí pro