Touch 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
운영 체제에서 다중 터치 입력을 처리하고 이벤트를 발생시키는 FrameReported 애플리케이션 수준 서비스를 제공합니다.
public ref class Touch abstract sealed
public static class Touch
type Touch = class
Public Class Touch
- 상속
-
Touch
예제
다음 예제에서는 터치 스크린을 Canvas 통해 두 손가락을 끌어 간단한 패턴을 만들 수 있습니다. 각 터치는 .로 TouchDevice표시됩니다. 패턴은 터치에서 제공하는 터치 포인트 사이에 선을 그려 만들어집니다. 이 예제에서는 Windows 터치 호환 화면이 필요합니다.
다음 태그는 가운데에 있는 사용자 인터페이스로 Canvas 구성된 사용자 인터페이스를 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>
다음 코드는 이벤트를 처리합니다 FrameReported . 터치가 누르면 CanvasTouchDevice 에 캡처됩니다Canvas. 터치가 해제되면 TouchDevice 해제됩니다. 터치가 가로 CanvasId 로 이동하면 확인됩니다. 첫 번째 터치에서 이동한 경우 해당 위치가 기록됩니다. 두 번째 터치에서 이동하면 첫 번째 터치의 위치에서 두 번째 터치의 위치로 선이 그려집니다.
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
설명
FrameReported 이벤트는 Silverlight와의 호환성을 지원하기 위해 Windows Presentation Foundation(WPF)에 포함됩니다. Silverlight와의 호환성을 보장할 필요가 없는 경우 터치 이벤트(예: TouchDown and TouchMove, on UIElement, UIElement3D또는 ContentElement.)를 사용합니다.
FrameReported 이벤트는 TouchDown 및 TouchMove 같은 다른 WPF 입력 이벤트와 동일한 이벤트 모델을 사용하지 않습니다. UI의 개체 트리를 통해 잠재적으로 라우팅되는 요소별 이벤트로 노출되는 대신, FrameReported 이 이벤트는 애플리케이션 수준에서 처리되는 단일 이벤트입니다. 따라서 이벤트 처리기의 매개 변수를 sender 사용하여 처리되는 요소를 확인할 수 없습니다.
TouchFrameEventArgs 터치 이벤트와 관련된 값을 가져오는 TouchPoint 데 사용합니다. TouchPoint에서 터치를 Position 가져와서 동작인지 여부를 TouchActionDownMoveUp 확인할 수 있습니다. 를 사용하여 .를 TouchPointTouchDevice가져올 수도 있습니다. 에서 디바이스 TouchDevice 를 Id확인하고 터치되는 요소에 대한 정보를 가져올 수 있습니다.
이벤트
| Name | Description |
|---|---|
| FrameReported |
터치 메시지를 보낼 때 발생합니다. |