Version: 6000.3
语言: 中文
指针事件
过渡事件

工具提示事件

发送 Tooltip 事件以检查视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
请参阅术语表
指针下方能够显示工具提示。这是仅限编辑的活动。

工具提示通常使用tooltip财产。还可以响应工具提示事件来设置工具提示。

可以通过两种方式处理工具提示事件:

  1. 将回调设置为TooltipEvent.这会将工具提示添加到没有一个集合的视觉元素。这还可以替代设置为可视元素的工具提示。
  2. 声明自定义 VisualElement(例如声明扩展 VisualElement 的类),并重写ExecuteDefaultAction方法。

如果设置回调或实现自定义视觉元素来声明工具提示,请不要为tooltip属性。

当您将tooltip属性,鼠标光标下的视觉元素会自动注册回调来处理TooltipEvent.此回调还会停止事件的进一步传播。

如果您注册自定义回调来处理TooltipEvent,则必须停止事件的传播,否则可以在稍后的传播阶段覆盖工具提示。

工具提示事件的基类是 EventBase 类。

事件 描述 涓涓细流 气泡升起 可取消
工具提示事件 在 Unity 显示工具提示之前发送。 是的 是的 是的

独特的属性

rect:面板坐标系中悬停视觉元素的矩形。

tooltip:这tooltip属性是一个文本字符串,要在tooltip事件。以下回调事件在事件期间设置工具提示属性:

   evt.tooltip = "Tooltip set by parent!";

活动列表

工具提示事件

TooltipEvent在 Unity 编辑器显示工具提示之前发送。处理程序应将TooltipEvent.tooltipstring 和TooltipEvent.rect.

target:鼠标下方的视觉元素。

例子

以下示例显示了ToolTipEvent.

要查看示例,请执行以下作:

  1. 编辑器> 资产>脚本(Assets Scripts Editor)下,创建一个名为 SampleWindow 的 C# 脚本。
  2. 将以下示例之一复制到 C# 脚本中。
  3. 从 编辑器工具栏(Editor Toolbar) 中,选择 窗口(Window) > UI 工具包(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();
       }
   }
}

指针事件
过渡事件