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