UIElement.PointerPressed Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит, когда указатель инициирует действие Нажатие в этом элементе.
public:
virtual event PointerEventHandler ^ PointerPressed;
// Register
event_token PointerPressed(PointerEventHandler const& handler) const;
// Revoke with event_token
void PointerPressed(event_token const* cookie) const;
// Revoke with event_revoker
UIElement::PointerPressed_revoker PointerPressed(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerPressed;
function onPointerPressed(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerpressed", onPointerPressed);
uIElement.removeEventListener("pointerpressed", onPointerPressed);
- or -
uIElement.onpointerpressed = onPointerPressed;
Public Custom Event PointerPressed As PointerEventHandler
<uiElement PointerPressed="eventhandler"/>
Тип события
Комментарии
Сенсорные, мыши, перо и перо получаются, обрабатываются и управляются как входные данные указателя в приложении UWP. Любое из этих взаимодействий может привести к возникновению события PointerPressed. Дополнительные сведения см. в разделе Обработка входных данных указателя. События указателя предназначены для сценариев, когда вас интересуют несколько указателей и их связи, или когда вы изучаете особенности каждого указателя, например точное положение координат. В противном случае можно рассмотреть возможность обработки событий жестов, таких как Tapped.
Для обработки этого события используйте обработчик на основе PointerEventHandler .
Ввод мыши связывается с отдельным указателем, назначаемым при первом обнаружении ввода мыши. При щелчке кнопки мыши (левой, правой или колеса) создается вспомогательная связь между указателем и этой кнопкой с помощью события PointerPressed. Событие PointerReleased инициируется только тогда, когда отпускается та же кнопка мыши (никакая другая кнопка не может быть связана с указателем до завершения события). Из-за этой исключительной связи другие щелчки кнопок мыши обрабатываются с помощью события PointerMoved. Состояние кнопки мыши можно проверить при обработке этого события, как показано в следующем примере.
private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
// Multiple, simultaneous mouse button inputs are processed here.
// Mouse input is associated with a single pointer assigned when
// mouse input is first detected.
// Clicking additional mouse buttons (left, wheel, or right) during
// the interaction creates secondary associations between those buttons
// and the pointer through the pointer pressed event.
// The pointer released event is fired only when the last mouse button
// associated with the interaction (not necessarily the initial button)
// is released.
// Because of this exclusive association, other mouse button clicks are
// routed through the pointer move event.
if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
// To get mouse state, we need extended pointer details.
// We get the pointer info through the getCurrentPoint method
// of the event argument.
Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
if (ptrPt.Properties.IsLeftButtonPressed)
{
eventLog.Text += "\nLeft button: " + ptrPt.PointerId;
}
if (ptrPt.Properties.IsMiddleButtonPressed)
{
eventLog.Text += "\nWheel button: " + ptrPt.PointerId;
}
if (ptrPt.Properties.IsRightButtonPressed)
{
eventLog.Text += "\nRight button: " + ptrPt.PointerId;
}
}
// Prevent most handlers along the event route from handling the same event again.
e.Handled = true;
// Display pointer details.
updateInfoPop(e);
}
private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
// Multiple, simultaneous mouse button inputs are processed here.
// Mouse input is associated with a single pointer assigned when
// mouse input is first detected.
// Clicking additional mouse buttons (left, wheel, or right) during
// the interaction creates secondary associations between those buttons
// and the pointer through the pointer pressed event.
// The pointer released event is fired only when the last mouse button
// associated with the interaction (not necessarily the initial button)
// is released.
// Because of this exclusive association, other mouse button clicks are
// routed through the pointer move event.
if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
// To get mouse state, we need extended pointer details.
// We get the pointer info through the getCurrentPoint method
// of the event argument.
Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
if (ptrPt.Properties.IsLeftButtonPressed)
{
eventLog.Text += "\nLeft button: " + ptrPt.PointerId;
}
if (ptrPt.Properties.IsMiddleButtonPressed)
{
eventLog.Text += "\nWheel button: " + ptrPt.PointerId;
}
if (ptrPt.Properties.IsRightButtonPressed)
{
eventLog.Text += "\nRight button: " + ptrPt.PointerId;
}
}
// Prevent most handlers along the event route from handling the same event again.
e.Handled = true;
// Display pointer details.
updateInfoPop(e);
}
События указателя с устройства ввода с мыши обычно имеют один и тот же идентификатор PointerId в сведениях о событии за время существования приложения.
PointerPressed — это перенаправленное событие. Дополнительные сведения о концепции перенаправленных событий см. в статье Общие сведения о событиях и перенаправленных событиях.
Для сенсорного ввода, а также событий, связанных с взаимодействием, или событий операций, которые являются следствием сенсорного ввода, элемент должен быть видимым для проверки нажатия. В таком случае элемент становится источником события и вызывает событие, сопоставленное с действием. UIElement.Visibility должен быть видимым. Другие свойства производных типов также влияют на видимость проверки попадания. Дополнительные сведения см. в разделе Общие сведения о событиях и перенаправленных событиях.
PointerPressed поддерживает возможность подключения обработчиков событий к маршруту, который будет вызываться, даже если данные события помечены как Handled. См. раздел AddHandler.
Определенные элементы управления среда выполнения Windows могут иметь обработку на основе класса для события ввода PointerPressed. В этом случае элемент управления, вероятно, имеет переопределение метода OnPointerPressed. Как правило, событие помечается обработчиком класса, а событие PointerPressed не вызывается для обработки никакими обработчиками пользовательского кода в этом элементе управления. Например, ButtonBase имеет обработку класса, которая обрабатывает PointerPressed и вместо этого вызывает click. Дополнительные сведения о том, как работает обработка событий на основе классов, см. в статье Общие сведения о событиях и перенаправленных событиях.
Элементы управления также могут иметь анимацию личности PointerDownThemeAnimation , которая выполняется независимо от события.
Запись указателя
PointerPressed иногда используется в качестве инициирующего события при захвате указателя, поэтому все последующие события, связанные с указателем, фиксируются определенным элементом до тех пор, пока указатель остается вниз. Чтобы записать указатель, вызовите метод CapturePointer для определенного элемента пользовательского интерфейса, который должен поддерживать запись. Обычно это делается в обработчике событий PointerPressed, и вы вызываете CapturePointer для отправителя события. Дополнительные сведения о том, как записать указатель и почему это может потребоваться, см. в разделе CapturePointer.
События pointerPressed и жестов или события манипуляции
Действие пользователя, которое запускает событие PointerPressed, может в конечном итоге привести к тому, что событие Holding представляет жест удержания , если устройство ввода не является мышью. Если элемент, в котором происходит pointerPressed, имеет значение ManipulationMode , отличное от значения по умолчанию, то это действие также может привести к различным событиям манипуляции, таким как ManipulationStarted. Дополнительные сведения см. в разделе "Использование событий манипуляции" статьи Обработка входных данных указателя.
При срабатывании pointerPressed события жестов, такие как Касание , пока не срабатывают, так как события жестов, отличные от holding , ожидают освобождения указателя перед запуском события.
В качестве общего правила проектирования для взаимодействия с пользователем приложения следует проверить, существуют ли события, относящиеся к элементам управления, которые можно обрабатывать для взаимодействия, или соответствующие события жестов. Например, если вашим элементом управления является Кнопка, у этого элемента управления есть событие Click , специально предназначенное для вызова пользователем действия кнопки. Или если элемент не является кнопкой, но вы обрабатываете событие и для основного действия элемента, вы будете обрабатывать Касания.
События жестов можно специально отключить для отдельных элементов, задав такие свойства, как IsTapEnabled. Вы можете отключить события жестов при обработке манипуляций, но обычно не нужно отключать события жестов при обработке событий указателя. События указателя не могут быть специально отключены, но вы можете не обрабатывать их.
PointerPressed и PointerReleased
Другие события вместо PointerReleased могут срабатать в конце действия, например PointerCanceled или PointerCaptureLost. Не полагайтесь на события PointerPressed и PointerReleased , которые всегда происходят парами. Для правильной работы приложение должно прослушивать и обрабатывать все события, которые представляют собой вероятные выводы действия Нажатие . Ниже приведены некоторые причины, по которым может не получиться событие PointerReleased :
- Различия в том, как конкретное оборудование обрабатывает действия касания и нажатие
- Программный захват указателя из другого указателя
- Действия пользователя, изменяющие связь области отображения, например изменение разрешения или параметров монитора
- Входные взаимодействия, такие как перо, касающееся той же поверхности, что и предыдущее действие касания