Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

События фокуса происходят, когда элемент получает или теряет фокус.

События фокусировки полезны, когда вам нужно переключить фокус с визуальных элементов на другие. Элементы управления часто используют события фокуса для изменения своего содержимого в зависимости от состояния фокуса. Например, текстовое поле может отображать замещающий текст, когда оно не находится в фокусе, или оно может реагировать на FocusInEvent и очищать замещающий текст.

Фокус может переключаться на визуальный элемент в зависимости от действий пользователя, таких как нажатие табуляции или нажатие, или с помощью скриптов C#Часть код, который позволяет вам создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом. Подробнее
См. в Словарь
с element.Focus( ).

События фокуса делятся на два разных типа:

  • FocusOutEvent и FocusInEvent отправляются по пути распространения непосредственно перед изменением фокуса.
  • FocusEvent и BlurEvent отправляются в цель события сразу после изменения фокуса.

Базовым классом для всех событий фокуса является FocusEventBase.

Событие Описание Стекает вниз Пузыри вверх Отменяемый
FocusOutEvent Отправляется до того, как элемент потеряет фокус.
FocusInEvent Отправляется до того, как элемент получит фокус.
BlurEvent Отправляется после того, как элемент потерял фокус.
FocusEvent Отправляется после того, как элемент получил фокус.

Уникальные свойства

В следующем разделе объясняются соответствующие свойства, уникальные для событий фокуса. Это не полный список всех свойств в семействе фокусных событий. Полный список см. в разделе FocusEventBase документации по API.

relatedTarget: содержит визуальный элемент, являющийся вторичной целью события. Для событий FocusOut и Blur он содержит элемент, который получает фокус. Для событий FocusIn и Focus он содержит элемент, который теряет фокус.

Событие цель связанная цель
Blur Элемент, который теряет фокус. Элемент, который теряет фокус.
Focus Элемент, который теряет фокус. Элемент, который теряет фокус.
focusIn Элемент, который теряет фокус. Элемент, который теряет фокус.
focusOut Элемент, который теряет фокус. Элемент, который теряет фокус.

Список событий

FocusOutEvent

Событие FocusOutEvent отправляется, когда элемент вот-вот потеряет фокус.

target: элемент, который потеряет фокус.

relatedTarget: элемент, который получит фокус.

FocusInEvent

Событие FocusInEvent отправляется, когда элемент вот-вот получит фокус.

target: элемент, который получит фокус.

relatedTarget: элемент, который потеряет фокус.

Размытие

Событие, отправляемое после того, как элемент теряет фокус.

target: элемент, потерявший фокус.

relatedTarget: элемент, получивший фокус.

Событие фокуса

Событие, отправленное после того, как элемент получил фокус.

target: элемент, получивший фокус.

relatedTarget: элемент, потерявший фокус.

Примеры

В следующем примере показано, как использовать текст-заполнитель в TextField.

После того как вы создадите элементы с помощью UXML, сценарий присваивает текстовому полю текстовый заполнитель. Когда TextField находится в фокусе, FocusInEvent срабатывает и очищает текст-заполнитель. FocusOutEvent переключает режим заполнителя на основе содержимого TextField.

Чтобы увидеть пример в действии, сделайте следующее:

  1. Создайте новый скрипт C# с именем PlaceHolderExample.
  2. Скопируйте пример кода в скрипт C#.
  3. В разделе Окно > UI Toolkit > PlaceHolderExample откройте только что созданное окно редактора.
using UnityEditor; using UnityEngine; using UnityEngine.UIElements; public class PlaceHolderExample : EditorWindow { [MenuItem("Window/UI Toolkit/PlaceHolderExample")] public static void ShowExample() { PlaceHolderExample wnd = GetWindow(); wnd.titleContent = new GUIContent("PlaceHolderExample"); } private bool placeHolderMode = true; private const string placeHolderText = "Write here"; public void CreateGUI() { TextField textField = new TextField(); textField.value = placeHolderText; rootVisualElement.Add(textField); textField.RegisterCallback(OnFocusInTextField); textField.RegisterCallback(OnFocusOutTextField); } private void OnFocusInTextField(FocusInEvent evt) { // If the text field just received focus and the user might want to write // or edit the text inside, the placeholder text should be cleared (if active) if (placeHolderMode) { var textField = evt.target as TextField; textField.value = ""; } } private void OnFocusOutTextField(FocusOutEvent evt) { // If the text field is empty after the user is done editing and the // element lost focus, write placeholder text into the text field var textField = evt.target as TextField; placeHolderMode = string.IsNullOrEmpty(textField.value); if (placeHolderMode) textField.value = placeHolderText; } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3