Поделиться через


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

Комментарии

Обычно доступ к объекту выполняется TouchDevice с помощью TouchEventArgs.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)

Происходит при завершении манипуляции.

Применяется к