Condividi tramite


Touch Classe

Definizione

Fornisce un servizio a livello di applicazione che elabora input multitocco dal sistema operativo e genera l'evento FrameReported.

public ref class Touch abstract sealed
public static class Touch
type Touch = class
Public Class Touch
Ereditarietà
Touch

Esempio

L'esempio seguente consente di creare modelli semplici su un trascinamento di due dita su un Canvas touchscreen. Ogni tocco è rappresentato da un TouchDeviceoggetto . Il modello viene creato disegnando una linea tra i punti di tocco forniti dai tocco. Questo esempio richiede una schermata compatibile con Il tocco di Windows.

Il markup seguente crea l'interfaccia utente, costituita da un Canvas oggetto centrato in un Gridoggetto .

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

Il codice seguente gestisce l'evento FrameReported . Quando un tocco preme sull'oggetto Canvas, viene TouchDevice acquisito nell'oggetto Canvas. Quando il tocco viene sollevato, l'oggetto TouchDevice viene rilasciato. Quando un tocco si sposta attraverso l'oggetto Canvas, viene Id controllato. Se lo spostamento proviene dal primo tocco, viene registrata la sua posizione. Se lo spostamento proviene dal secondo tocco, una linea viene disegnata dalla posizione del primo tocco alla posizione del secondo tocco.

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

Commenti

L'evento FrameReported è incluso in Windows Presentation Foundation (WPF) per supportare la compatibilità con Silverlight. Se non è necessario garantire la compatibilità con Silverlight, usare gli eventi di tocco, ad esempio TouchDown e TouchMove, su UIElement, UIElement3Do ContentElement.

L'evento FrameReported non usa lo stesso modello di evento di altri eventi di input WPF, ad esempio TouchDown e TouchMove. Anziché essere esposto come evento specifico dell'elemento che potenzialmente instrada attraverso l'albero degli oggetti di un'interfaccia utente, l'evento FrameReported è un singolo evento gestito a livello di applicazione. Pertanto, non è possibile usare il parametro del gestore eventi per determinare l'elemento sender toccato.

Usare l'oggetto TouchFrameEventArgs per ottenere i TouchPoint valori pertinenti all'evento touch. TouchPointDall'oggetto è possibile ottenere il Position tocco e determinare se era TouchAction un'azione Down, Moveo Up . È anche possibile usare l'oggetto per ottenere l'oggetto TouchPointTouchDevice. TouchDeviceDa , è possibile determinare il dispositivo Id e ottenere informazioni sull'elemento toccato.

Eventi

FrameReported

Si verifica quando viene inviato un messaggio di tocco.

Si applica a