Acara Tooltip dikirim untuk memeriksa apakah elemen visual di bawah pointer dapat menampilkan tooltip. Ini adalah acara Editor-only.
Tooltips biasanya diatur menggunakan properti tooltip
. Anda juga dapat menanggapi acara Tooltip untuk mengatur tooltips.
Anda dapat menangani acara Tooltip dalam dua cara:
TooltipEvent
. Ini menambahkan tooltip ke elemen visual yang tidak memiliki satu set. Ini juga dapat menimpa set tooltip ke elemen visual.ExecuteDefaultAction
.Jika Anda mengatur callback atau menerapkan elemen visual khusus untuk mendeklarasikan tooltips, jangan menetapkan nilai untuk properti tooltip
melalui kode atau UXML.
Ketika Anda mengatur properti tooltip
, elemen visual di bawah kursor mouse secara otomatis mendaftarkan callback untuk menangani TooltipEvent
. Callback ini juga menghentikan perbanyakan lebih lanjut dari acara.
Jika Anda mendaftarkan panggilan kustom untuk menangani TooltipEvent
, Anda harus menghentikan perbanyakan acara, atau ujung alat dapat ditimidasi nanti dalam fase perambatan.
Kelas dasar untuk acara Tooltip adalah kelas EventBase.
Event | Description | Trickles down | Bubbles up | Cancellable |
---|---|---|---|---|
Login Sitemap | Sent hanya sebelum Unity menampilkan tooltip. | Yes | Yes | Yes |
rect
: Persegi panjang elemen visual yang terlambat dalam sistem koordinat panel.
tooltip
: Properti tooltip
adalah string teks untuk ditampilkan di dalam kotak tooltip selama acara tooltip
. Acara callback berikut menetapkan properti tooltip selama acara:
evt.tooltip = "Tooltip set by parent!";
TooltipEvent
dikirim hanya sebelum Editor Unity menampilkan tooltip. Pegang harus mengatur string TooltipEvent.tooltip
dan TooltipEvent.rect
.
target
: Elemen visual di bawah mouse.
Contoh berikut menampilkan perilaku ToolTipEvent
.
Untuk melihat contoh:
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.
}
}
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();
}
}
}