Touch Třída

Definice

Poskytuje službu na úrovni aplikace, která zpracovává vícedotykový FrameReported vstup z operačního systému a vyvolává událost.

public ref class Touch abstract sealed
public static class Touch
type Touch = class
Public Class Touch
Dědičnost
Touch

Příklady

Následující příklad umožňuje vytvořit jednoduché vzory přetažením Canvas dvou prstů přes dotykovou obrazovku. Každý dotyk je reprezentován .TouchDevice Vzorek se vytvoří nakreslením čáry mezi dotykovými body poskytnutými 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á z Canvas rozhraní , které je vycentrováno v 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>

Následující kód zpracovává FrameReported událost. Když dotyk stiskne , zachytí Canvasse do Canvas.TouchDevice Po zvednutí dotyku TouchDevice se funkce uvolní. Když se dotyk přesune přes Canvas, zaškrtne se Id . Pokud přesunutí přišlo od prvního dotyku, zaznamená se jeho poloha. Pokud pohyb pochází z druhého dotyku, je čára nakreslena z pozice prvního dotyku do pozice druhého dotyku.

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

Poznámky

Událost FrameReported je součástí Windows Presentation Foundation (WPF) kvůli podpoře kompatibility s silverlightem. Pokud nemusíte zajistit kompatibilitu s silverlightem, použijte události dotykového ovládání, jako TouchDown jsou a TouchMove, , UIElementUIElement3Dnebo ContentElement.

Událost FrameReported nepoužívá stejný model událostí jako jiné vstupní události WPF, například TouchDown a TouchMove. Místo toho, aby byla zpřístupněna jako událost specifická pro prvek, která potenciálně směruje přes strom objektů uživatelského rozhraní, FrameReported je událost jedinou událostí, která se zpracovává na úrovni aplikace. Proto nelze použít sender parametr obslužné rutiny události k určení prvku, na který se uživatel dotkne.

Použijte k TouchFrameEventArgs získání TouchPoint hodnot, které jsou relevantní pro událost dotykového ovládání. Z příkazu TouchPointmůžete získat Position z dotykového ovládání a určit, jestli TouchAction byla Downakce , Movenebo Up . Můžete také použít TouchPoint k získání TouchDevice. V nástroji TouchDevicemůžete určit zařízení Id a získat informace o prvku, kterého se uživatel dotkne.

Událost

FrameReported

Vyvolá se při odeslání dotykové zprávy.

Platí pro