TouchDevice 类

定义

表示触摸屏上的一个手指产生的单个触控输入。

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)

在操作结束后发生。

适用于