Touch Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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. |