UIElement.PointerEntered Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит, когда указатель входит в область проверки попадания этого элемента.
public:
virtual event PointerEventHandler ^ PointerEntered;
// Register
event_token PointerEntered(PointerEventHandler const& handler) const;
// Revoke with event_token
void PointerEntered(event_token const* cookie) const;
// Revoke with event_revoker
UIElement::PointerEntered_revoker PointerEntered(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerEntered;
function onPointerEntered(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerentered", onPointerEntered);
uIElement.removeEventListener("pointerentered", onPointerEntered);
- or -
uIElement.onpointerentered = onPointerEntered;
Public Custom Event PointerEntered As PointerEventHandler
<uiElement PointerEntered="eventhandler"/>
Тип события
Комментарии
Событие PointerEntered срабатывает в ответ на перемещение указателя в ограничивающую область элемента. Сенсорные, мыши, перо и перо получаются, обрабатываются и управляются как входные данные указателя в приложении UWP. Любое из этих устройств и их взаимодействия могут создавать событие PointerEntered. Дополнительные сведения см. в разделе Обработка входных данных указателя , а также в других примечаниях в этом разделе.
PointerEntered — это перенаправленное событие. Дополнительные сведения о концепции перенаправленных событий см. в статье Общие сведения о событиях и перенаправленных событиях.
Для обработки этого события используйте обработчик на основе PointerEventHandler .
Для сенсорного ввода, а также событий, связанных с взаимодействием, или событий операций, которые являются следствием сенсорного ввода, элемент должен быть видимым для проверки нажатия. В таком случае элемент становится источником события и вызывает событие, сопоставленное с действием. UIElement.Visibility должен быть видимым. Другие свойства производных типов также влияют на видимость проверки попадания. Дополнительные сведения см. в разделе Общие сведения о событиях и перенаправленных событиях.
PointerEntered поддерживает возможность подключения обработчиков событий к маршруту, который будет вызываться, даже если данные события помечены как Handled. См. раздел AddHandler.
Определенные элементы управления среда выполнения Windows могут иметь обработку на основе классов для входного события PointerEntered. В этом случае элемент управления, вероятно, имеет переопределение метода OnPointerEntered. Как правило, событие не помечается обработчиком класса, поэтому событие PointerEntered по-прежнему может обрабатываться пользовательским кодом для элемента управления в пользовательском интерфейсе. Дополнительные сведения о том, как работает обработка событий на основе классов, см. в статье Общие сведения о событиях и перенаправленных событиях.
Pointer Input для ввода с помощью мыши и пера
Устройство ввода с помощью мыши имеет экранный курсор, который отображается при каждом перемещении мыши, даже если в это время кнопка мыши не нажата. Событие PointerEntered предшествует первому событию PointerMoved, вызванному элементом . Аналогичное поведение доступно для ввода устройства с помощью пера, где устройства ввода могут обнаружить, что перо наведено на поверхность устройства ввода (IsInRange), но не касается его. Таким образом, входные данные с помощью мыши и пера будут вызывать события PointerEntered в случаях, немного отличавшихся от случаев сенсорного ввода. Дополнительные сведения см. в статье Взаимодействие с помощью мыши.
PointerEntered для сенсорного ввода
Точка касания обнаруживается только в том случае, если палец касается поверхности. Всякий раз, когда сенсорное действие приводит к событию PointerPressed , этому событию непосредственно предшествует событие PointerEntered, при этом все данные события являются одинаковыми сведениями для двух событий (одинаковый идентификатор указателя, одно и то же положение и т. д.). Другими словами, указатель считается входить в элемент в тот момент и позицию, в которую элемент касается точкой касания.
Кроме того, точка касания создает pointer Enter, если указатель остается в постоянном контакте с поверхностью при перемещении и входит в границы проверки попадания элемента. Для таких видов сенсорных действий также возможно, что действие может быть обработано как манипуляция или жест, а не событие указателя. Дополнительные сведения см. в разделе Обработка входных данных указателя.
Поведение перенаправленного события для PointerEntered
PointerEntered — это перенаправленное событие. Дополнительные сведения о концепции перенаправленных событий см. в статье Общие сведения о событиях и перенаправленных событиях. Вы можете определить несколько событий PointerEntered для элементов пользовательского интерфейса XAML, в том числе для элементов, которые находятся в отношениях "родитель-потомок". В типичной композиции пользовательского интерфейса дочерние элементы находятся где-то в пределах границ родительского элемента, поэтому событие PointerEntered сначала возникает для родительского элемента, когда указатель перемещается в родительский элемент, а затем для дочернего элемента, когда указатель перемещается туда. Событие PointerEntered обычно не направляется к родительскому элементу, когда дочерний элемент запускает его, так как концептуально указатель уже находится в пределах родительских границ, и система входных данных также не может перенаправить событие PointerEntered на родительский объект. Как правило, вы не хотите, чтобы события PointerEntered в любом случае маршрутично, вы хотите обработать их только от отправителя. Вы можете явно запретить маршрутизацию событий, задав для параметра Handledзначение true в обработчике.
В редких случаях можно увидеть пузырьок события PointerEntered для родительского объекта. Например, если вы использовали RenderTransform для смещения дочернего элемента за пределами его родительского элемента, событие будет пузырьков в родительский элемент при вводе дочернего элемента и предоставляет сведения о событии, сообщаемые по тому, как дочерний элемент произвел событие.
Запись указателя
Если указатель был захвачен другим элементом, pointer Enter не срабатывает, даже если захваченный указатель входит в границы элемента. Однако, если запись указателя освобождается, пока указатель находится на элементе, PointerEntered будет запускаться, даже если предположить, что в этом случае указатель мог оставаться неподвижным. Значение GetCurrentPoint из данных события может быть точкой где-то в середине элемента, а не точкой по его краям, так как указатель уже находился на элементе при освобождении записи. Дополнительные сведения о захвате указателя см. в разделе Взаимодействие с захватом указателя и мышью.
Визуальные состояния PointerOver для элементов управления
Элементы управления, имеющие шаблоны элементов управления, могут применять визуальные состояния, которые активны, только если указатель находится над границами элемента управления. Для получения или изменения этого поведения не всегда нужно обрабатывать PointerEntered или PointerExited . Возможно, потребуется повторно создать шаблон элемента управления. Если вы наследуете от существующего элемента управления, который уже имеет низкоуровневую обработку входных данных, которая вызывает визуальные состояния, необходимо предоставить визуальное состояние с именем PointerOver в "CommonStates" VisualStateGroup, а встроенная логика элемента управления будет загружать это визуальное состояние при наведении указателя на элемент управления. Визуальное состояние указателя часто присутствует в элементах управления, которые можно вызвать или выбрать, например Button или ListViewItem. Если вы наследуете от базового класса , например Control , который не имеет встроенной обработки входных событий, которая вызывает визуальные состояния, может потребоваться переопределить OnPointerEntered и OnPointerExited самостоятельно, чтобы получить такое поведение. Подробнее об этом см. в разделе Раскадрованные анимации для визуальных состояний.
Работа в Windows 8
В Windows 8 событие PointerEntered обычно не срабатывает, если экранный курсор (перо или точка касания) фактически не перемещается. Например, PointerEntered не срабатывает, если мышь и ее экранный курсор остаются неподвижными, а объект с обработчиком PointerEntered имеет положение, преобразованное или иным образом скорректированное для перемещения под экранным курсором. Кроме того, pointerEntered не срабатывает, если элемент, например всплывающее или всплывающее окно, исчезает, а указатель теперь находится на новом элементе (но указатель еще не перемещен). С этим связано поведение PointerExited . Например, если всплывающее окно закрывается программным способом, оно не будет запускать PointerExited , если указатель не переместился в качестве причины его закрытия. Вы по-прежнему получите событие PointerEntered, если указатель перемещается над вновь обнаруженным элементом, но это определяет пользователь, будет ли это происходить во время перемещения, а не в момент закрытия. Короче говоря, попытка использовать последний элемент, который сработал PointerEntered для определения состояния указателя в пользовательском интерфейсе приложения, не является исчерпывающей в Windows 8, и существует множество сценариев, в которых PointerEntered и PointerExited не будут сопряжены. Это влияет на визуальные состояния элементов управления, которые также используют PointerEntered и PointerExited в качестве триггеров.
Начиная с Windows 8.1, pointerExited запускается в любом случае, когда указатель одновременно запускал событие PointerEntered, но некоторые изменения состояния пользовательского интерфейса происходят, когда указатель больше не находится в этом элементе. Сюда входят случаи, когда исчезает весь элемент. А если указатель теперь находится на другом элементе из-за исчезновения предыдущего элемента, этот элемент запускает pointerEntered, даже если указатель никогда не перемещается. Элементы, устанавливающие для их видимости значение Свернутый программным способом, является одним из способов исчезновения элементов из пользовательского интерфейса, и поведение Windows 8.1 учитывает это и будет запускать PointerExited для элемента Collapsed и PointerEntered для вновь появившегося элемента.
Если вы переносите код приложения из Windows 8 в Windows 8.1 может потребоваться учитывать это изменение поведения, так как это приводит к срабатыванию PointerExited и PointerEntered в случаях, когда они не запускались ранее.
Приложения, которые скомпилированы для Windows 8, но выполняются в Windows 8.1, продолжают использовать правила, действующие в Windows 8.