TouchDevice 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示触摸屏上的一个手指产生的单个触控输入。
public ref class TouchDevice abstract : System::Windows::Input::InputDevice, System::Windows::Input::IManipulator
public abstract class TouchDevice : System.Windows.Input.InputDevice, System.Windows.Input.IManipulator
type TouchDevice = class
inherit InputDevice
interface IManipulator
Public MustInherit Class TouchDevice
Inherits InputDevice
Implements IManipulator
- 继承
- 实现
示例
以下示例使你能够通过在触摸屏上 Canvas 拖动两根手指来创建简单的模式。 每个触摸都由 TouchDevice 中的 TouchEventArgs表示。 该模式是通过在触摸提供的触摸点之间绘制一条线来创建的。 此示例需要与 Windows 触控兼容的屏幕。
以下标记创建用户界面,该用户界面由 Canvas 居中网格中的 ,并附加触摸事件的事件处理程序。
<Window x:Class="WpfTouchEventsSample.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"
TouchDown="canvas_TouchDown"
TouchMove="canvas_TouchMove"
TouchUp="canvas_TouchUp" />
</Grid>
</Window>
以下代码处理触摸事件。 在 上Canvas按下触摸时,会将 TouchDevice 捕获到 。Canvas 当触摸解除时, TouchDevice 将释放 。 当触摸在 上 Canvas移动时, Id 将选中 。 如果移动来自第一次触摸,则会记录其位置。 如果移动来自第二次触摸,则会从第一次触摸的位置到第二次触摸的位置绘制一条线。
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Controls;
namespace WpfTouchEventsSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
// Variables to track the first two touch points
// and the ID of the first touch point.
private Point pt1, pt2 = new Point();
private int firstTouchId = -1;
public MainWindow()
{
InitializeComponent();
}
private void canvas_TouchDown(object sender, TouchEventArgs e)
{
Canvas _canvas = (Canvas)sender as Canvas;
if (_canvas != null)
{
_canvas.Children.Clear();
e.TouchDevice.Capture(_canvas);
// Record the ID of the first touch point if it hasn't been recorded.
if (firstTouchId == -1)
firstTouchId = e.TouchDevice.Id;
}
}
private void canvas_TouchMove(object sender, TouchEventArgs e)
{
Canvas _canvas = (Canvas)sender as Canvas;
if (_canvas != null)
{
TouchPoint tp = e.GetTouchPoint(_canvas);
// This is the first touch point; just record its position.
if (e.TouchDevice.Id == firstTouchId)
{
pt1.X = tp.Position.X;
pt1.Y = tp.Position.Y;
}
// This is not the first touch point; draw a line from the first point to this one.
else if (e.TouchDevice.Id != firstTouchId)
{
pt2.X = tp.Position.X;
pt2.Y = tp.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;
_canvas.Children.Add(_line);
}
}
}
private void canvas_TouchUp(object sender, TouchEventArgs e)
{
Canvas _canvas = (Canvas)sender as Canvas;
if (_canvas != null && e.TouchDevice.Captured == _canvas)
{
_canvas.ReleaseTouchCapture(e.TouchDevice);
}
}
}
}
Class MainWindow
' Variables to track the first two touch points
' and the ID of the first touch point.
Private pt1, pt2 As Point
Private firstTouchId As Integer = -1
' Touch Down
Private Sub canvas_TouchDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
Dim _canvas As Canvas = CType(sender, Canvas)
If (_canvas IsNot Nothing) Then
_canvas.Children.Clear()
e.TouchDevice.Capture(_canvas)
' Record the ID of the first touch point if it hasn't been recorded.
If firstTouchId = -1 Then
firstTouchId = e.TouchDevice.Id
End If
End If
End Sub
' Touch Move
Private Sub canvas_TouchMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
Dim _canvas As Canvas = CType(sender, Canvas)
If (_canvas IsNot Nothing) Then
Dim tp = e.GetTouchPoint(_canvas)
' This is the first touch point; just record its position.
If e.TouchDevice.Id = firstTouchId Then
pt1.X = tp.Position.X
pt1.Y = tp.Position.Y
' This is not the first touch point; draw a line from the first point to this one.
ElseIf e.TouchDevice.Id <> firstTouchId Then
pt2.X = tp.Position.X
pt2.Y = tp.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
_canvas.Children.Add(_line)
End If
End If
End Sub
' Touch Up
Private Sub canvas_TouchUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
Dim _canvas As Canvas = CType(sender, Canvas)
If (_canvas IsNot Nothing AndAlso e.TouchDevice.Captured Is _canvas) Then
_canvas.ReleaseTouchCapture(e.TouchDevice)
End If
End Sub
End Class
注解
通常使用 TouchEventArgs.TouchDevice 属性访问 TouchDevice 。 表示 TouchDevice 屏幕上的一次触摸。 如果存在多个触摸,请使用 Id 属性来区分它们。
注意
此类包含适用于所有成员的类级别的继承要求。 SecurityException当派生类没有完全信任权限时,将引发 。 有关安全要求的详细信息,请参阅 链接需求 和 继承需求。
构造函数
TouchDevice(Int32) |
从派生类中的构造函数中调用,用于初始化 TouchDevice 类。 |
属性
ActiveSource |
获取报告此设备的输入的 PresentationSource。 |
Captured |
获取捕获了 TouchDevice 的元素。 |
CaptureMode |
获取 TouchDevice 的捕获策略。 |
DirectlyOver |
获取位于触摸触点正下方的元素。 |
Dispatcher |
获取与此 Dispatcher 关联的 DispatcherObject。 (继承自 DispatcherObject) |
Id |
获取由操作系统提供的 TouchDevice 的唯一标识符。 |
IsActive |
获取一个值,该值指示设备是否为活动设备。 |
Target |
获取从 TouchDevice 中接收输入的元素。 |
方法
Activate() |
将 TouchDevice 添加到输入消息系统中。 |
Capture(IInputElement) |
使用 Element 捕获模式将触摸屏输入捕获到指定元素。 |
Capture(IInputElement, CaptureMode) |
使用指定的 CaptureMode 将触摸屏输入捕获到指定元素。 |
CheckAccess() |
确定调用线程是否可以访问此 DispatcherObject。 (继承自 DispatcherObject) |
Deactivate() |
从输入消息系统中移除 TouchDevice。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetIntermediateTouchPoints(IInputElement) |
在派生类中重写时,返回在最近触摸事件与上一个触摸事件之间收集到的所有触点。 |
GetTouchPoint(IInputElement) |
返回触摸设备相对于指定元素的当前位置。 |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
OnCapture(IInputElement, CaptureMode) |
在元素上捕获触摸屏输入时调用。 |
OnManipulationEnded(Boolean) |
在操作结束后调用。 |
OnManipulationStarted() |
在操作开始后调用。 |
ReportDown() |
报告对元素按下了触摸屏输入。 |
ReportMove() |
报告触摸屏输入跨元素移动。 |
ReportUp() |
报告触摸屏输入已从元素移开。 |
SetActiveSource(PresentationSource) |
设置报告此设备的输入的 PresentationSource。 |
Synchronize() |
强制 TouchDevice 将用户界面与基础触点同步。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
VerifyAccess() |
强制调用线程具有此 DispatcherObject 的访问权限。 (继承自 DispatcherObject) |
事件
Activated |
将 TouchDevice 添加到输入消息传送系统时发生。 |
Deactivated |
从输入消息系统移除 TouchDevice 时发生。 |
Updated |
在发送触摸消息时发生。 |
显式接口实现
IManipulator.GetPosition(IInputElement) |
返回 IManipulator 对象的位置。 |
IManipulator.Id |
获取由操作系统提供的 TouchDevice 的唯一标识符。 |
IManipulator.ManipulationEnded(Boolean) |
在操作结束后发生。 |