/// <summary> /// Constructor /// </summary> static WlyViewMgr() { var types = typeof(WlyViewMgr).Assembly.GetTypes(); IWlyUIView mainView = null; foreach (var t in types) { if (!typeof(WlyUIViewBase).IsAssignableFrom(t) || t.IsAbstract) { continue; } var attribute = t.GetCustomAttribute <WlyViewAttribute>(); if ((attribute == null) && !t.IsAbstract) { throw new InvalidOperationException($"界面{t.Name}没有附加界面属性"); } var view = Activator.CreateInstance(t) as IWlyUIView; _viewList.Add(view); if ((view != null) && (view.Type == WlyViewType.场景_主界面)) { view.Level = 0; mainView = view; } } // 界面检查 foreach (var v in Enum.GetValues(typeof(WlyViewType))) { if (Equals(v, WlyViewType.Unknow)) { continue; } if (_viewList.FirstOrDefault(o => Equals(o.Type, v)) == null) { throw new InvalidOperationException($"没有定义界面 {v}"); } } if (mainView == null) { throw new InvalidOperationException("未定义主界面"); } mainView.Init(); _viewList = _viewList.OrderByDescending(o => o.Level).ToList(); }
public WlyUIViewWrapper(IWlyUIView view) { m_view = view; var level = m_view.Level; if (level == WlyViewMgr.LevelMax) { m_row = 0; } else { m_row = level + 1; } }
/// <summary> /// 退出当前界面 /// </summary> /// <param name="dmGuid"></param> /// <param name="timeout"></param> public static void ExitCurrentView(string dmGuid, TimeSpan timeout) { IWlyUIView current = null; var wait = FlowLogicHelper.RepeatRun(() => { foreach (var v in _viewList) { if (v.IsCurrentView(dmGuid)) { current = v; return(true); } } return(false); }, timeout); if (!wait) { throw new InvalidOperationException("无法确定当前所属界面"); } wait = FlowLogicHelper.RepeatRun(() => { if (current.IsCurrentView(dmGuid)) { current.Exit(dmGuid); Thread.Sleep(400); return(false); } return(true); }, timeout); if (!wait) { throw new InvalidOperationException("无法从当前界面退出"); } }