Событие Tooltip отправляется, чтобы проверить, может ли визуальный элемент под указателем отображать всплывающую подсказку. Это мероприятие предназначено только для редактора.
Подсказки обычно задаются с помощью свойства tooltip
. Вы также можете ответить на событие Tooltip, чтобы настроить всплывающие подсказки.
Вы можете обработать событие Tooltip двумя способами:
- Настройте обратный вызов для
TooltipEvent
. Это добавляет всплывающую подсказку к визуальному элементу, который не имеет ни одного набора. Это также может переопределить всплывающую подсказку, установленную для визуального элемента. - Объявите пользовательский VisualElement (например, объявите класс, расширяющий VisualElement) и переопределите метод
ExecuteDefaultAction
.
Если вы устанавливаете обратный вызов или реализуете настраиваемый визуальный элемент для объявления всплывающих подсказок, не устанавливайте значение свойства tooltip
с помощью кода или UXML.
Когда вы устанавливаете свойство tooltip
, визуальный элемент под курсором мыши автоматически регистрирует обратный вызов для обработки TooltipEvent
. Этот обратный вызов также останавливает дальнейшее распространение события.
Если вы регистрируете пользовательский обратный вызов для обработки TooltipEvent
, необходимо остановить распространение события, иначе всплывающая подсказка может быть переопределена позже на этапе распространения.
Базовым классом для событий всплывающей подсказки является класс EventBase.
Событие | Описание | Стекает вниз | Пузыри вверх | Отменяемый |
---|---|---|---|---|
TooltipEvent | Отправляется непосредственно перед тем, как Unity отображает всплывающую подсказку. | ✔ | ✔ | ✔ |
Уникальные свойства
rect
: прямоугольник наведенного визуального элемента в системе координат панели.
tooltip
: свойство tooltip
представляет собой текстовую строку, которая отображается внутри окна всплывающей подсказки во время всплывающая подсказка
событие. Следующее событие обратного вызова устанавливает свойство всплывающей подсказки во время события:
evt.tooltip = "Подсказка установлена родителем!";
Список событий
Подсказка
Событие TooltipEvent
отправляется непосредственно перед тем, как редактор Unity отображает всплывающую подсказку. Обработчик должен установить строку TooltipEvent.tooltip
и TooltipEvent.rect
.
target
: визуальный элемент под курсором мыши.
Примеры
В следующих примерах показано поведение ToolTipEvent
.
Чтобы просмотреть пример:
- В разделе Ресурсы > Сценарии > Редактор создайте сценарий 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();
}
}
}