Сенсорный поддержка в WPF
Это сообщение является небольшая модификация сенсорного и манипуляции на MSDN, а краткий обзор и ссылки для себя на поддержку сенсорного WPF.
Обзор
Новое оборудование и API в Windows 7 операционная система обеспечивает приложениям возможность получить вклад от многочисленных прикосновений одновременно. WPF позволяет приложениям обнаруживать и реагировать на ощупь подобно к реагированию на другие материалы, такие как мышь или клавиатура, за счет повышения событий, когда происходит прикосновение.
WPF предоставляет два типа событий, когда происходит прикосновение: события прикосновения и манипуляции событиями. Сенсорный события дают исходные данные о каждый палец на сенсорный экран и его движения. Манипуляция событий интерпретировать входные данные как определенные действия.
Предпосылки
Вам потребуются следующие компоненты для разработки приложений, который реагирует на прикосновения.
- Microsoft Visual Studio 2010.
- Windows 7.
- Устройства, такие как сенсорный экран, который поддерживает Windows Touch.
WPF предоставляет два типа событий, когда происходит прикосновение: события прикосновения и манипуляции событиями. Сенсорный события дают исходные данные о каждый палец на сенсорный экран и его движения. Манипуляция событий интерпретировать входные данные как определенные действия.
Терминология
Следующие термины используются, когда сенсорный обсуждается.
- Touch является тип пользовательского ввода, который признан Windows 7. Как правило, сенсорный инициируется положив пальцы на сенсорный экран. Обратите внимание, что такие устройства, как сенсорная панель, которая является общей на портативные компьютеры не поддерживают контакт, если устройство просто преобразует положение пальцев и движения мыши.
- Multitouch на ощупь, что происходит из более чем из одной точки одновременно. Windows 7 и WPF поддерживает мультитач. Всякий раз, когда сенсорный обсуждается в документации по WPF, понятия относятся к мультитач.
- Манипулирование происходит, когда прикосновение воспринимается как физическое действие, которое применяется к объекту. В WPF, события манипуляций интерпретировать входные данные как перевод, расширение, или вращение манипуляции.
- Сенсорный аппарат представляет собой устройство, которое производит сенсорного ввода, такие как одним пальцем на сенсорный экран.
Элементы управления, реагировать на нажатия
Следующие элементы управления можно прокручивать с помощью перетаскивания пальцем по контролю, если он имеет содержание, которое прокручивается из поля зрения.
- ScrollViewer определяет ScrollViewer.PanningMode вложенное свойство, которое позволяет указать, следует ли сенсорный панорамирования включен горизонтально, вертикально, оба или ни одного. ScrollViewer.PanningDeceleration свойство определяет, как быстро прокрутки замедляется, когда пользователь поднимает палец с сенсорного экрана. ScrollViewer.PanningRatio вложенное свойство указывается соотношение смещения прокрутки перевести манипуляции смещением.
Class Diagram
Ниже диаграммы классов освещает основные классы и члены их для сенсорных поддержки:
- Нажмите
- Сенсорный события подвергаются как UIElement , UIElement3D и ContentElement как восходящей событий, так и через сенсорный . FrameReported как на уровне приложений событие (для совместимости с Silverlight).
- В то время приземления, перемещение и до событий, как туннельный и пузырей, прикоснуться въезжать и выезжать из событий переполняют только.
- Захват сенсорного устройства является явное через UIElement . CaptureTouch метод.
- Сенсорный события являются синхронными.
- Сенсорный события всегда сжигают, будь то манипуляция события уволен или нет.
- WPF поддерживает мультитач.
- Манипуляция
- Манипуляция события, предоставляемые UIElement как пузырится событии.
- Манипуляция события открыли огонь по UIElement только его IsManipulationEnabled это правда.
- Манипуляция события являются синхронными.
- WPF поддерживает три типа манипуляции: расширение и вращение (в том числе один поворот пальца точки опоры), и инерция.
- Захват сенсорного устройства является неявной манипуляции.
- Статический класс манипуляции содержит методы для получения и обновления манипуляции параметрами вне обработчиков событий манипуляций. Он также содержит методы для более продвинутого использования манипуляций логики, такие как добавление добавление и удаление манипуляторов.
- WPF поддерживает несколько жестов.
- WPF не поддерживает жесты, или 3D-манипуляций.
- ScrollViewer имеет встроенную поддержку для манипуляции и инерции, и это настраиваемый приложениями.
Нажмите
Сенсорный События
Базовых классов, UIElement , UIElement3D и ContentElement , определить события, которые вы можете подписаться на так ваше приложение будет реагировать на прикосновения. Сенсорный события полезны, когда приложение воспринимает прикосновение, как нечто иное, чем манипулирование объектом. Например, приложение, которое позволяет пользователю рисовать с одним или несколькими пальцами бы подписаться на ощупь событий.
Все три класса определяют следующие события, которые ведут себя так же, независимо от класса, определяющего.
- TouchDown
- TouchMove
- TouchUp
- TouchEnter
- TouchLeave
- PreviewTouchDown
- PreviewTouchMove
- PreviewTouchUp
- GotTouchCapture
- LostTouchCapture
Как события клавиатуры и мыши, сенсорного события маршрутизируемых событий. События, которые начинаются с просмотра являются туннельный события и события, которые начинаются с сенсорным здесь бурлит событиями. При обработке этих событий, вы можете получить место на входе, по отношению к любому элементу, вызвав GetTouchPoint или GetIntermediateTouchPoints метод.
Исполнение Путь сенсорный События
Чтобы понять взаимодействие между нажатием событий, рассмотрим ситуацию, когда пользователь вводит один палец на элемент, перемещает пальцем в элементе, а затем поднимает палец с элементом. На следующем рисунке показано выполнение восходящей событий (туннельный событий для простоты опущены).
Следующий список описывает последовательность событий на предыдущем рисунке. 
TouchEnter событие происходит один раз, когда пользователь помещает палец на элемент.
TouchDown событие происходит один раз.
TouchMove событие происходит несколько раз, когда пользователь перемещает палец внутри элемента.
TouchUp событие происходит один раз, когда пользователь поднимает палец с элементом.
TouchLeave событие происходит один раз.
Когда более двух пальцев используются, события происходят для каждого пальца.
Манипуляции и инерция
Манипуляция События
В случаях, когда приложение позволяет пользователю управлять объектом, UIElement Класс определяет манипуляции событиями. В отличие от сенсорного события, которые просто сообщают о положении прикосновения, манипуляции событий сообщают, как ввод может быть интерпретирован. Есть три вида манипуляции, перевод, расширение и вращение. В следующем списке описано, как вызывать три вида манипуляций.
Положите палец на объект и перемещать палец по сенсорным вызвать перевод манипуляции. Как правило, движется объект.
Положите два пальца на объект и переместить пальцы ближе друг к другу или дальше друг от друга, чтобы вызвать расширение манипуляции. Как правило, это изменяет размер объекта.
Положите два пальца на объект и поверните пальцы вокруг друг друга, чтобы вызвать вращение манипуляции. Это обычно вращается объект.
Более чем один вид манипуляции могут происходить одновременно.
Когда вы привести объекты в ответ на манипуляции, вы можете иметь объект, кажется, есть инерция. Это может сделать ваши объекты моделирования физического мира. Например, когда вы нажимаете книги за столом, если вы нажимаете достаточно трудно книга будет продолжать двигаться после того, как вы отпустите ее. WPF позволяет имитировать такое поведение за счет повышения манипуляции событий после пальцев пользователя освобождает объект.
Для получения информации о том, как создать приложение, которое позволяет пользователям перемещать, масштабировать и вращать объект, см. Создание первого приложения сенсорный .
UIElement определяет следующие события манипуляций.
По умолчанию UIElement не получает эти манипуляции событиями. Для получения манипуляции событиями на UIElement , набор UIElement.IsManipulationEnabled к истине.
Путь выполнения манипуляций События
Рассмотрим сценарий, когда пользователь "бросает" объекта. Пользователь помещает палец на объекте, перемещает пальцем сенсорного экрана на короткое расстояние, а затем поднимает палец во время движения. Результатом этого является то, что объект будет двигаться под пальцами пользователя и продолжают двигаться после того, как пользователь поднимает палец.
На следующем рисунке показан путь выполнения манипуляций события и важную информацию о каждом событии.
Манипуляция события

Следующий список описывает последовательность событий на предыдущем рисунке.
ManipulationStarting событие происходит, когда пользователь помещает палец на объекте. Среди прочего, это событие позволяет установить ManipulationContainer собственности. В последующие события, положение манипуляции будет по отношению к ManipulationContainer . В случаях, кроме ManipulationStarting , это свойство только для чтения, так ManipulationStarting событие единственный раз, когда вы можете установить это свойство.
ManipulationStarted события дальше. Это событие сообщает о происхождении манипуляции.
ManipulationDelta событие происходит несколько раз, как пальцы пользователя перейти сенсорным экраном. DeltaManipulation собственности ManipulationDeltaEventArgs класса сообщает, является ли манипуляция интерпретируется как движение, расширение и перевод. Здесь вы можете выполнять большую часть работы манипулирования объектом.
ManipulationInertiaStarting событие происходит, когда пальцы пользователя терять контакта с объектом. Это событие позволяет указать замедление манипуляции во время инерции. Это объясняется тем, объект может эмулировать различные физические атрибуты пространства или, если вы выберете. Например, предположим, что приложение состоит из двух объектов, которые представляют элементы в физическом мире, и один тяжелее другого. Вы можете сделать тяжелее объект замедляться быстрее, чем светлее объекта.
ManipulationDelta событие происходит несколько раз, как инерция происходит. Заметим, что это событие происходит, когда пальцы пользователя перемещаться по сенсорным экраном и когда WPF имитирует инерции. Другими словами, ManipulationDelta происходит до и после ManipulationInertiaStarting события. ManipulationDeltaEventArgs.IsInertial отчеты собственности ли ManipulationDelta событие происходит во время инерции, так что вы можете убедиться, что собственность и выполнять различные действия, в зависимости от его стоимости.
ManipulationCompleted событие происходит, когда манипуляция и инерция любой заканчивается. То есть, в конце концов ManipulationDelta событий, ManipulationCompleted события, чтобы сигнализировать о том, что манипуляция является полным.
Граничная Обратная связь
UIElement также определяет ManipulationBoundaryFeedback события. Это событие происходит, когда ReportBoundaryFeedback метод называется в ManipulationDelta события. ManipulationBoundaryFeedback событий позволяет приложениям или компонентов для обеспечения визуальной обратной связи, когда объект попадает на границу. Например, окно класса обрабатывает ManipulationBoundaryFeedback событие, чтобы вызвать окно немного двигаться, когда ее края встречается.
Мышь поощрения
Вы можете отменить манипуляции по телефону Отмена метода аргументы события в любых манипуляций событием, за исключением ManipulationBoundaryFeedback события. Когда вы вызываете Отмена , манипулирование события не поднимаются и мыши события происходят на ощупь. В следующей таблице описываются отношения между временем, манипуляции отменяется и мыши события, которые происходят.
Событие, которое Отменить называется в | Мыши события, которые происходят на вход, что уже произошло |
|---|---|
Мышь вниз события. | |
Мыши и события перемещения мыши. | |
Мыши, перемещения мыши и мыши до события. |
Заметим, что если вы называете Отмена при манипуляции в инерции, метод возвращает ложное и ввод не вызывает события мыши.
Взаимосвязь между сенсорной и манипуляция События
UIElement всегда могут получить события прикосновения. Когда IsManipulationEnabled свойство имеет значение True, UIElement может получить как прикосновения и манипуляции событиями. Если TouchDown событие не обрабатывается (то есть, обрабатывается собственности является ложным), манипуляции логика фиксирует прикосновение к элементом и генерирует события манипуляций. Если обрабатывается свойство имеет значение верно в TouchDown случае, манипуляции логика не производит манипуляции событиями. На следующем рисунке показана связь между сенсорным события и события манипуляций.
Нажмите и события манипуляций

Следующий список описывает отношения между сенсорным и манипулирования событиями, что показано в предыдущем примере.
Когда первое устройство сенсорного генерирует TouchDown события UIElement , манипулирование логика называет CaptureTouch метод, который генерирует GotTouchCapture события.
Когда GotTouchCapture происходит, манипуляции логика называет Manipulation.AddManipulator метод, который генерирует ManipulationStarting события.
Когда TouchMove событий, манипулирование логика порождает ManipulationDelta события, которые происходят перед ManipulationInertiaStarting события.
Когда последний устройство нажатием на элемент поднимает TouchUp случае, манипуляции логика порождает ManipulationInertiaStarting события.
EventArgs Class Diagram
Ниже диаграмма классов показывает все на ощупь и манипуляции EventArgs классов и соответствующих типов.








Последние комментарии