添加窗口任务栏功能,添加窗口的管理功能

This commit is contained in:
2026-07-26 16:49:32 +08:00
parent 96d6d63a64
commit 0c3b79b22b
17 changed files with 1905 additions and 500 deletions
+35 -7
View File
@@ -12,21 +12,23 @@ namespace XericUI.Form
{
/// <summary>
/// 窗口标题栏 — 独立子组件,挂载在 UIFormController 的子对象上。
/// Start 时向上查找父级 UIFormController,绑定按钮事件到其公开 API。
/// 与窗口完全解耦:Controller 不关心标题栏是否存在。
/// Start 时向上查找父级 UIFormController,绑定按钮/Toggle 事件到其公开 API。
/// </summary>
[AddComponentMenu("Xeric UI Vessel/Form/UI Title Bar")]
public class UITitleBar : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
[Header("控件引用")]
[SerializeField, Tooltip("窗口图标")]
private Image m_IconImage;
[SerializeField, Tooltip("标题文本")]
private UI_Text m_TitleText;
[SerializeField, Tooltip("关闭按钮")]
private Button m_CloseButton;
[SerializeField, Tooltip("最大化按钮")]
private Button m_MaximizeButton;
[SerializeField, Tooltip("最大化 Toggle(isOn=全屏)")]
private Toggle m_MaximizeToggle;
[SerializeField, Tooltip("最小化按钮")]
private Button m_MinimizeButton;
@@ -57,9 +59,25 @@ namespace XericUI.Form
{
if (_controller == null) return;
// 实时同步标题(可能由外部修改)
if (m_TitleText != null && m_TitleText.text != _controller.WindowTitle)
m_TitleText.text = _controller.WindowTitle;
// 同步最大化 Toggle 状态
if (m_MaximizeToggle != null)
{
bool maxed = _controller.IsMaximized;
if (m_MaximizeToggle.isOn != maxed)
m_MaximizeToggle.SetIsOnWithoutNotify(maxed);
}
// 同步图标
if (m_IconImage != null && _controller.Entry != null)
{
if (_controller.Entry.Icon != null && m_IconImage.sprite != _controller.Entry.Icon)
m_IconImage.sprite = _controller.Entry.Icon;
if (m_IconImage.color != _controller.Entry.TintColor)
m_IconImage.color = _controller.Entry.TintColor;
}
}
#region 事件绑定
@@ -69,8 +87,8 @@ namespace XericUI.Form
if (m_CloseButton != null)
m_CloseButton.onClick.AddListener(() => _controller.Close());
if (m_MaximizeButton != null)
m_MaximizeButton.onClick.AddListener(() => _controller.ToggleMaximize());
if (m_MaximizeToggle != null)
m_MaximizeToggle.onValueChanged.AddListener(_ => _controller.ToggleMaximize());
if (m_MinimizeButton != null)
m_MinimizeButton.onClick.AddListener(() => _controller.Minimize());
@@ -119,11 +137,21 @@ namespace XericUI.Form
if (m_TitleText != null)
m_TitleText.text = _controller.WindowTitle;
if (m_MaximizeToggle != null)
m_MaximizeToggle.isOn = _controller.IsMaximized;
if (m_AutoSnapToggle != null)
m_AutoSnapToggle.isOn = _controller.AutoSnapEnabled;
if (m_AutoHideToggle != null)
m_AutoHideToggle.isOn = _controller.AutoHideEnabled;
// 图标
if (m_IconImage != null && _controller.Entry != null && _controller.Entry.Icon != null)
{
m_IconImage.sprite = _controller.Entry.Icon;
m_IconImage.color = _controller.Entry.TintColor;
}
}
#endregion