Сенсорный поддержка в WPF
Этот пост небольшая модификация сенсорного и манипуляция на MSDN, а краткий обзор и ссылки для себя на поддержку сенсорного WPF.
Обзор
Новые аппаратные и API в Windows 7 операционная система обеспечивает приложениям возможность получать вклад от многочисленных прикосновений одновременно. WPF позволяет приложениям обнаруживать и реагировать на контакт в так же, отвечая на другой вход, такие как мышь или клавиатура, за счет повышения событий, когда происходит прикосновение.
WPF предоставляет два типа событий, когда прикосновение происходит: события прикосновения и манипуляции событиями. Сенсорный события дают исходные данные о каждом палец на сенсорный экран и его движения. Манипуляция событий интерпретировать входные данные как определенные действия.
Предпосылки
Вам нужны следующие компоненты для разработки приложений, который реагирует на прикосновение.
- Microsoft Visual Studio 2010.
- Windows 7.
- Устройства, например, сенсорный экран, который поддерживает Windows Touch.
WPF предоставляет два типа событий, когда прикосновение происходит: события прикосновения и манипуляции событиями. Сенсорный события дают исходные данные о каждом палец на сенсорный экран и его движения. Манипуляция событий интерпретировать входные данные как определенные действия.
Терминология
Следующие термины используются, когда сенсорный обсуждается.
- Прикосновение тип пользовательского ввода, которая распознается Windows 7. Как правило, сенсорный инициируется положив пальцы на сенсорный экран. Обратите внимание, что устройства, такие как тачпад, который является общим на портативные компьютеры не поддерживают сенсорный, если устройство просто преобразует положение пальцев и движения мыши.
- Multitouch на ощупь, что происходит из более чем из одной точки одновременно. Windows 7 и WPF поддерживает мультитач. Всякий раз, когда сенсорный обсуждается в документации по WPF, концепции применимы и к мультитач.
- Манипуляции происходит, когда сенсорный интерпретируется как физическое действие, которое применяется к объекту. В WPF события манипуляций интерпретировать входные данные как перевод, расширение, или вращение манипуляции.
- Сенсорный прибор представляет собой устройство, которое производит сенсорного ввода, такие как одним пальцем на сенсорный экран.
Элементы управления, реагировать на сенсорный
Следующие элементы управления можно прокручивать, перетаскивая пальцем по контролю, если он имеет содержание, которое прокручивается вне поля зрения.
- ScrollViewer определяет ScrollViewer.PanningMode вложенное свойство, которое позволяет указать, следует ли сенсорный панорамирования включен по горизонтали, вертикали, оба или ни одного. ScrollViewer.PanningDeceleration свойство определяет, как быстро прокрутки замедляется, когда пользователь поднимает палец с сенсорного экрана. ScrollViewer.PanningRatio вложенное свойство указывается соотношение смещения прокрутки перевести манипуляции смещением.
Диаграмма классов
Ниже диаграммы классов выделяет ключевые классы и члены их для сенсорных поддержки:
- Прикосновение
- Сенсорный события подвергаются как 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 событие не обработано (то есть, Handled собственности является ложным), манипуляции логика фиксирует прикосновение к элементу и генерирует события манипуляций. Если Handled свойство имеет значение верно в TouchDown событие, манипуляции логика не генерирует события манипуляций. На следующем рисунке показана связь между сенсорным события и события манипуляций.
Нажмите и события манипуляций

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








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