Событие Tooltip
Событие Tooltip отправляется для проверки того, может ли визуальный элемент под указателем отображать tooltip. Это событие только для Редактора.
Подсказки обычно устанавливаются с помощью свойства tooltip. Вы также можете отвечать на событие Tooltip, чтобы установить подсказки.
Событие Tooltip можно обрабатывать двумя способами:
- Установить обратный вызов
TooltipEvent. Это добавляет всплывающую подсказку визуальному элементу, у которого её не было. Это также может переопределить подсказку, заданную визуальному элементу. - Объявите собственный VisualElement (то есть класс, расширяющий VisualElement) и переопределите
ExecuteDefaultActionметод.
Если вы устанавливаете обратный вызов или реализуете пользовательский визуальный элемент для объявления подсказок, не устанавливайте значение свойства tooltip с помощью кода или UXML.
Когда вы устанавливаете свойство tooltip, визуальный элемент под курсором мыши автоматически регистрирует обратный вызов для обработки TooltipEvent. Этот обратный вызов также останавливает дальнейшее распространение события.
Если вы зарегистрируете пользовательский обратный вызов для обработки TooltipEvent, вы должны остановить распространение события, или tooltip может быть переопределен позже в фазе распространения.
Базовый класс для событий Tooltip — EventBase class.
В следующей таблице описывается событие tooltip и фазы его распространения:
| Мероприятие | Описание | Просыпается | Пузырьки вверх | Аннулируемые |
|---|---|---|---|---|
| TooltipEvent | Отправляется незадолго до того, как Unity показывает tooltip. | Да | Да | Да |
Уникальные свойства
rect: прямоугольник визуального элемента, находящегося в поле зрения, в системе координат панели.
tooltip: Свойство tooltip представляет собой текстовую строку, которая будет отображаться внутри поля tooltip во время события tooltip. Следующее событие обратного вызова устанавливает свойство tooltip во время события:
evt.tooltip = "Tooltip set by parent!";
Список событий
TooltipEvent
,TooltipEventи отправляются перед тем, как Unity Editor отобразит tooltip. Обработчик должен установить строку TooltipEvent.tooltip и TooltipEvent.rect.
target: Визуальный элемент под курсором мыши.
Примеры
В следующих примерах показано поведение ToolTipEvent.
Чтобы просмотреть пример:
- В Assets > Скрипты > Редакторсоздайте скрипт C# под названием SampleWindow.
- Скопируйте один из следующих примеров в скрипт C#.
- На панели редактора выберите Окно > UI Toolkit > SampleWindow.
Пример 1: Регистрация обратного вызова в TooltipEvent на родительском визуальном элементе
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class SampleWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/SampleWindow")]
public static void ShowExample()
{
SampleWindow wnd = GetWindow<SampleWindow>();
wnd.titleContent = new GUIContent("SampleWindow");
}
public void CreateGUI()
{
VisualElement label = new Label("Hello World! This is a UI Toolkit Label.");
rootVisualElement.Add(label);
label.tooltip = "And this is a tooltip";
// If you comment out the registration of the callback, the tooltip that displays for the label is "And this is a tooltip".
// If you keep the registration of the callback, the tooltip that displays for the label (and any other child of rootVisualElement)
// is "Tooltip set by parent!".
rootVisualElement.RegisterCallback<TooltipEvent>(evt =>
{
evt.tooltip = "Tooltip set by parent!";
evt.rect = (evt.target as VisualElement).worldBound;
evt.StopPropagation();
}, TrickleDown.TrickleDown); // Pass the TrickleDown.TrickleDown parameter to intercept the event before it reaches the label.
}
}
Пример 2: Заявление пользовательского визуального элемента и переопределение ExecuteDefaultAction
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class SampleWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/SampleWindow")]
public static void ShowExample()
{
SampleWindow wnd = GetWindow<SampleWindow>();
wnd.titleContent = new GUIContent("SampleWindow");
}
private void CreateGUI()
{
CustomLabel custom1 = new CustomLabel("custom 1");
rootVisualElement.Add(custom1);
CustomLabel custom2 = new CustomLabel("custom 2");
rootVisualElement.Add(custom2);
}
}
public class CustomLabel : Label
{
private static int m_InstanceCounter = 0;
private int m_CurrentCounter;
public CustomLabel(string labelText) : base(labelText)
{
m_CurrentCounter = m_InstanceCounter++;
}
protected override void ExecuteDefaultAction(EventBase evt)
{
// Other events need to be handled as usual.
base.ExecuteDefaultAction(evt);
if (evt.eventTypeId == TooltipEvent.TypeId())
{
TooltipEvent e = (TooltipEvent)evt;
// Apply an offset to the tooltip position.
var tooltipRect = new Rect(worldBound);
tooltipRect.x += 10;
tooltipRect.y += 10;
e.rect = tooltipRect;
// Set a custom/dynamic tooltip.
e.tooltip = $"This is instance # {m_CurrentCounter + 1} of my CustomLabel";
// Stop propagation avoids other instances of handling of the event that may override the values set here.
e.StopPropagation();
}
}
}