Touch 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供應用程式層級的服務,這個服務會處理作業系統的多點觸控輸入,以及引發 FrameReported 事件。
public ref class Touch abstract sealed
public static class Touch
type Touch = class
Public Class Touch
- 繼承
-
Touch
範例
下列範例可讓您藉由將兩指拖曳到觸摸屏上,在 上 Canvas 建立簡單的模式。 每個觸控都會以 TouchDevice表示。 此圖樣是藉由繪製觸控所提供的觸控點之間的線條來建立。 此範例需要 Windows Touch 兼容畫面。
下列標記會建立使用者介面,其中包含 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 事件。 當觸控按下 Canvas時,會 TouchDevice 擷取至 Canvas。 當觸控隨即解除時,會 TouchDevice 放開 。 當觸控在 之間 Canvas移動時, Id 會檢查 。 如果移動來自第一次觸控,則會記錄其位置。 如果移動來自第二個觸控,則會從第一個觸控的位置繪製線條到第二個觸控的位置。
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包含在 WPF Windows Presentation Foundation () ,以支援 Silverlight 的相容性。 如果您不需要確保與 Silverlight 相容,請使用觸控事件,例如 TouchDown 、 或ContentElement上的UIElementUIElement3D與 TouchMove。
事件 FrameReported 不會與其他 WPF 輸入事件使用相同的事件模型,例如 TouchDown 和 TouchMove。 事件不是公開為可能透過UI物件樹狀結構路由的專案特定事件,而是 FrameReported 在應用層級處理的單一事件。 因此,您無法使用 sender
事件處理程式的 參數來判斷觸控的專案。
TouchFrameEventArgs使用取得TouchPoint與觸控事件相關的值。 TouchPoint您可以從 取得Position觸控的 ,並判斷 是否TouchAction為Down、 Move或 Up 動作。 您也可以使用 TouchPoint 取得 。 TouchDevice TouchDevice從 中,您可以判斷裝置Id,並取得所觸碰專案的相關信息。
事件
FrameReported |
發生於傳送觸控訊息時。 |