UI(пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь Toolkit система событийСпособ отправки событий объектам в приложении на основе ввода, будь то клавиатура, мышь, касание или пользовательский ввод. Система событий состоит из нескольких компонентов, которые работают вместе для отправки событий. Подробнее
См. в Словарь прослушивает события, поступающие от операционной системные или скриптыЧасть кода, позволяющая создавать собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать для пользовательского ввода любым удобным для вас способом. Подробнее
See in Словарь и отправляет эти события визуальным элементам с помощью EventDispatcher. Диспетчер событий определяет соответствующую стратегию диспетчеризации для каждого отправляемого события. После определения диспетчер выполняет стратегию.
Визуальные элементы реализуют поведение по умолчанию для нескольких событий. Это может включать создание и выполнение дополнительных событий. Например, MouseMoveEvent
может генерировать дополнительные события MouseEnterEvent
и MouseLeaveEvent
. Эти события помещаются в очередь и обрабатываются после текущего события. Например, MouseMoveEvent
завершает обработку до событий MouseEnterEvent
и MouseLeaveEvent
.
Поведение отправки типов событий
Каждый тип события имеет свое поведение при отправке. Поведение каждого типа событий разбивается на три этапа:
- Распространяется: события, отправляемые элементам на этапе передачи.
- Всплывающие всплывающие окна: события, отправляемые элементам во время фазы всплывающих окон.
- Отменяемые: события, для которых можно отменить, остановить или предотвратить выполнение действия по умолчанию.
Список поведения отправки для каждого типа события см. на странице с описанием событий.
Распространение события
После того как диспетчер событий выбирает цель события, он вычисляет путь распространения события. Путь распространения — это упорядоченный список визуальных элементов, которые получают событие. Путь распространения происходит в следующем порядке:
- Путь начинается от корня дерева визуальных элементов и спускается к цели. Это этап просачивания.
- Цель события получает событие.
- Затем событие поднимается по дереву к корню. Это фаза всплытия.
Большинство типов событий отправляются всем элементам на пути распространения. Некоторые типы событий пропускают этап всплывающей подсказки, а некоторые типы событий отправляются только в цель события.
Если вы скроете или отключите элемент, он не будет получать события. События по-прежнему распространяются на предков и потомков скрытого или отключенного элемента.
По мере прохождения события по пути распространения Event.currentTarget
обновляется до элемента, обрабатывающего событие. В функции обратного вызова события есть два свойства, которые регистрируют поведение отправки:
Event.currentTarget
– это визуальный элемент, для которого был зарегистрирован обратный вызов.Event.target
– это элемент, в котором происходит событие, например элемент непосредственно под мышью.
Цель события
Цель события зависит от типа события. Для событий мыши целью чаще всего является самый верхний выбираемый элемент, непосредственно под мышью. Для событий клавиатуры целью является элемент, находящийся в фокусе.
У событий UI Toolkit есть свойство target
, содержащее ссылку на элемент, в котором произошло событие. Для большинства событий, исходящих из операционной системы, процесс отправки автоматически находит цель события.
Целевой элемент хранится в EventBase.target
и не изменяется в процессе отправки. Свойство Event.currentTarget
обновляется до визуального элемента, который в данный момент обрабатывает событие.
Режим выбора и пользовательские формы
Большинство событий мыши используют режим выбора для определения цели. Класс VisualElement
имеет свойство pickingMode
, которое поддерживает следующие значения:
-
PickingMode.Position
(по умолчанию): выбор выполняется на основе прямоугольника положения. -
PickingMode.Ignore
: предотвращает выбор в результате события мыши.
Вы можете переопределить метод VisualElement.ContainsPoint()
для выполнения пользовательской логики пересечения.
Захват мыши
После события MouseDownEvent
некоторые элементы должны зафиксировать положение указателя, чтобы гарантировать получение всех последующих событий мыши, даже если курсор больше не находится над элементом. Например, когда вы нажимаете кнопку, ползунок или полосу прокрутки.
Чтобы захватить мышь, вызовите element.CaptureMouse()
или MouseCaptureController.CaptureMouse()
.
Чтобы отпустить мышь, вызовите MouseCaptureController.ReleaseMouse()
. Если другой элемент уже захватывает мышь, когда вы вызываете CaptureMouse()
, элемент получает MouseCaptureOutEvent
и теряет захват.
В любой момент только один элемент в приложении может быть захвачен. Пока элемент имеет захват, он является целью всех последующих событий мыши, кроме событий колесика мыши. Это относится только к событиям мыши, у которых еще нет заданной цели и которые зависят от процесса отправки для определения цели.
Дополнительную информацию см. в разделе Захват событий.
Кольцо фокусировки и порядок табуляции
На каждой панели UI Toolkit есть кольцо фокусировки, которое определяет порядок фокуса элементов. По умолчанию поиск в глубину (DFS) в дереве визуальных элементов определяет порядок фокуса элементов. Например, порядок фокуса для дерева, изображенного ниже, будет F, B, A, D, C, E, G, I, H.
Некоторые события используют порядок фокуса, чтобы определить, какой элемент удерживает фокус. Например, целью события клавиатуры является элемент, находящийся в фокусе.
Используйте свойство focusable
, чтобы указать, можно ли сфокусировать визуальный элемент. По умолчанию VisualElements
нельзя сфокусировать, но некоторые подклассы, такие как TextField
, по умолчанию могут быть сфокусированы.
Используйте свойство tabIndex
для управления порядком фокуса следующим образом (значение tabIndex
по умолчанию равно 0):
- Если
tabIndex
имеет отрицательное значение, вы не можете использовать вкладку для элемента. - Если
tabIndex
равен нулю, элемент сохраняет порядок табуляции по умолчанию, определенный алгоритмом кольца фокусировки. - Если значение
tabIndex
положительное, элемент помещается перед другими элементами, имеющими нулевойtabIndex
(tabIndex = 0
) или значениеtabIndex
меньше собственного.