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 Touch.
Следующая разметка создает пользовательский интерфейс, состоящий из 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>
Следующий код обрабатывает события касания. При нажатии CanvasTouchDevice сенсорного касания на нее фиксируетсяCanvas. При снятии TouchDevice касания освобождается. При перемещении касания на ней CanvasId проверяется. Если перемещение произошло с первого касания, его расположение записывается. Если шаг пришел от второго касания, линия рисуется из позиции первого касания к позиции второго касания.
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
Комментарии
Обычно доступ к объекту TouchDeviceTouchEventArgs.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, CaptureMode) |
Записывает касание к указанному элементу с помощью указанного CaptureModeэлемента. |
| Capture(IInputElement) |
Записывает касание к указанному элементу Element с помощью режима записи. |
| 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) |
Происходит при завершении манипуляции. |