UIElement.PointerMoved Событие

Определение

Происходит при перемещении указателя, в то время как указатель остается в области проверки попадания этого элемента.

public:
 virtual event PointerEventHandler ^ PointerMoved;
// Register
event_token PointerMoved(PointerEventHandler const& handler) const;

// Revoke with event_token
void PointerMoved(event_token const* cookie) const;

// Revoke with event_revoker
UIElement::PointerMoved_revoker PointerMoved(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerMoved;
function onPointerMoved(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointermoved", onPointerMoved);
uIElement.removeEventListener("pointermoved", onPointerMoved);
- or -
uIElement.onpointermoved = onPointerMoved;
Public Custom Event PointerMoved As PointerEventHandler 
<uiElement PointerMoved="eventhandler"/>

Тип события

Комментарии

Взаимодействие сенсорного ввода, мыши и пера и пера получается, обрабатывается и управляется как ввод указателя в приложении UWP. Любое из этих взаимодействий может создать событие PointerMoved. Дополнительные сведения см. в разделе Обработка входных данных указателя и в разделе PointerMoved для ввода с помощью мыши и пера этой статьи.

В некоторых сценариях пользовательского интерфейса, особенно если пользователь использует мышь, это событие срабатывает очень часто. Помните о профиле производительности для кода, который вы помещаете в этот обработчик, и рассмотрите способы использования собственных флагов или допусков, которые могут регулировать количество раз, когда логика должна выполняться.

Это событие перенаправлено. Дополнительные сведения о концепции перенаправленных событий см. в статье Общие сведения о событиях и перенаправленных событиях.

Для сенсорного ввода, а также событий, связанных с взаимодействием, или событий операций, которые являются следствием сенсорного ввода, элемент должен быть видимым для проверки нажатия. В таком случае элемент становится источником события и вызывает событие, сопоставленное с действием. UIElement.Visibility должен быть видимым. Другие свойства производных типов также влияют на видимость проверки попадания. Дополнительные сведения см. в разделе Общие сведения о событиях и перенаправленных событиях.

Это событие также поддерживает возможность подключения обработчиков событий к маршруту, который будет вызываться, даже если данные события помечены как Handled. См . раздел AddHandler.

PointerMoved для ввода с помощью мыши и пера

Устройство ввода с помощью мыши имеет экранный курсор, который отображается при каждом перемещении мыши через границы элемента, даже если в это время кнопка мыши не нажата. Аналогичное поведение доступно для ввода устройства пера, где устройства ввода могут обнаружить, что перо наведено на поверхность устройства ввода, но не касается его. Таким образом, ввод с помощью мыши и пера будет вызывать события PointerMoved чаще, чем сенсорный ввод. Дополнительные сведения см. в статье Взаимодействие с помощью мыши.

В отличие от этого, точку касания можно обнаружить только в том случае, если палец касается поверхности. Точка касания будет создавать PointerMoved только в то время, когда эта точка касания остается в постоянном контакте с поверхностью при ее перемещении. Для таких типов сенсорных действий, которые создают PointerMoved, также вероятно, что действие будет обработано как манипуляция или жест. Дополнительные сведения см. в разделе Обработка входных данных указателя.

Ввод с помощью мыши связан с одним указателем, назначенным при первом обнаружении ввода с помощью мыши, и все взаимодействия, инициированные мышью, имеют один и тот же идентификатор PointerId. При щелчке кнопки мыши (левой, правой или колеса) создается вспомогательная связь между указателем и этой кнопкой с помощью события 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);
}

Некоторые приложения, например игры, должны отслеживать относительные движения мыши для определенных функций (например, виртуальный трекбол или камеру просмотра) и не используют системный курсор или абсолютные экранные координаты. Дополнительные сведения о скрытии курсора мыши и игнорировании абсолютных данных см. в разделах Относительное перемещение мыши и CoreWindow.

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

См. также раздел