using System; using System.Collections.Generic; public partial class UIManager { #region Stack Management - 委托给 UINavigationManager /// /// 导航栈(只读,用于兼容旧代码) /// public List UiWindowStack => UINavigationManager.Instance.NavigationStack; /// /// 检查窗口是否在栈中 /// public bool CheckIsWindowInStack(UIWindow window) { return UINavigationManager.Instance.IsWindowInStack(window); } /// /// 获取栈顶窗口 /// public UIWindow GetLast() { return UINavigationManager.Instance.GetTopWindow(); } /// /// 获取栈顶的全屏窗口 /// public UIWindow GetLastFullScreen() { return UINavigationManager.Instance.GetTopFullScreenWindow(); } /// /// 入栈(兼容方法,推荐使用 UINavigationManager) /// [Obsolete("Use UINavigationManager.HandleWindowOpen instead")] public void PushWindow(UIWindow window) { UINavigationManager.Instance.HandleWindowOpen(window, UIStackMode.Stackable); } /// /// 出栈 /// public UIWindow PopWindow() { return PopWindow(null); } /// /// 出栈(带窗口名检查) /// public UIWindow PopWindow(string checkWindowName) { var top = UINavigationManager.Instance.GetTopWindow(); if (top != null && (string.IsNullOrEmpty(checkWindowName) || checkWindowName == top.WindowName)) { UINavigationManager.Instance.HandleWindowClose(top); return top; } return null; } /// /// 强制移除窗口(从栈中移除但不关闭) /// public void ForceRemoveWindow(UIWindow window) { UINavigationManager.Instance.HandleWindowClose(window); } /// /// 清空栈(保留指定窗口) /// public void ClearHideStack(params string[] windowName) { var stack = UINavigationManager.Instance.NavigationStack; // 倒序遍历,避免索引问题 for (int i = stack.Count - 1; i >= 0; i--) { var window = stack[i]; // 检查是否是要保留的窗口 bool shouldKeep = false; for (int j = 0; j < windowName.Length; j++) { if (window.WindowName == windowName[j]) { shouldKeep = true; break; } } if (!shouldKeep) { // 先从栈移除,再关闭窗口 UINavigationManager.Instance.HandleWindowClose(window); window.CloseWindow(UIWindowCloseType.ForceDestroy); } } } /// /// 清空所有栈 /// public void ClearHideStack() { var stack = UINavigationManager.Instance.NavigationStack; // 先复制列表,避免在遍历时修改集合 var windowsToClose = new List(stack); UINavigationManager.Instance.Clear(); // 再关闭所有窗口 for (int i = 0; i < windowsToClose.Count; i++) { windowsToClose[i].CloseWindow(UIWindowCloseType.ForceDestroy); } } #endregion }