/// <summary> /// 主界面导航 /// </summary> /// <param name="args">参数</param> public void SendNavigationMsgForMainView(NormalNavigationArgs args) { GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() => { GalaSoft.MvvmLight.Messaging.Messenger.Default.Send <NormalNavigationArgs>(args, SystemKeys.MainUcNavigation); }); }
/// <summary> /// 打开新窗体 /// </summary> /// <param name="exportKey"></param> public void NavigationForNewWindow(string exportKey, object param = null, bool showInTaskBar = false, bool topMost = false) { NormalNavigationArgs args = NormalNavigationArgs.CreateWindowNavigationArgs(exportKey, param, showInTaskBar, topMost); MsgAggregation.Instance.SendNavigationMsgForWindow(args); }
/// <summary> /// 创建导航消息,但并不用导航事件发送 /// </summary> /// <param name="exportKey"></param> /// <param name="parameters"></param> /// <returns></returns> private NormalNavigationArgs CreateNavigationArgs(string exportKey, object parameters, bool showInTaskBar, out UcViewBase targetView) { if (string.IsNullOrWhiteSpace(exportKey)) { throw new NullReferenceException(string.Format("导航目标窗体Key【{0}】为空", exportKey)); } NormalNavigationArgs result = NormalNavigationArgs.CreateWindowNavigationArgs(exportKey, parameters, showInTaskBar); targetView = NavigationViewCreater.CreateView(result.MsgToken, result.Parameter); return(result); }
//主界面导航回调 private void MainNavigationCallback(NormalNavigationArgs args) { /* * TODO * 由于设备主页是整个程序共享的 * 所以在跳转的时候,需要先判断缓存中是否有对应Token的缓存界面 * 没有则创建新的设备主页 * */ UcViewBase targetView = null; if (args.IsBackArgs) { //返回前一个界面 targetView = args.Parameter as UcViewBase; } else { /* * TODO * 由于设备是多路提取,所以设备主页以及附属内容需要缓存 * 当案例编辑界面展开,此时的所有导航都需要折叠案例编辑界面 * */ if (EditCaseNavigationHelper.CurEditViewOpenStatus) { //折叠案例编辑界面 EditCaseNavigationHelper.SetEditCaseViewStatus(false, false); } if (args.MsgToken == ExportKeys.DeviceMainView) { var devTmp = args.Parameter as DeviceExtractionAdorner; if (devTmp != null && devTmp.Device != null) { PreCacheToken delToken = new PreCacheToken(devTmp.Device.ID, ExportKeys.DeviceMainView); if (!SystemContext.Instance.CurCacheViews.TryGetFirstView(delToken, out targetView)) { targetView = NavigationViewCreater.CreateView(args.MsgToken, args.Parameter); SystemContext.Instance.CurCacheViews.AddViewCache(delToken, targetView); } } } else { //记录打开案例编辑界面之前的页面,方便返回使用 EditCaseNavigationHelper.RecordBeforeViewOnisExpanded(MainView); targetView = NavigationViewCreater.CreateView(args.MsgToken, args.Parameter); } } MainView = targetView; }
//打开非模式对话框 private void OpenNewWindowCallback(NormalNavigationArgs args) { /* * TODO * * 由于可以同时提取多个手机,所以设备主页会多次打开【通过设备ID区分界面】 * 设备主页同时会在新窗口中显示【默认在主界面导航】 * 此处需要从缓存中查找和创建 * 由于主进程Shell未引用ViewModel模块,所以此处只能折中使用object[]传值【主要需要Device.ID来区分界面,object[0]为Device.ID】 * */ UcViewBase targetView = null; if (args.MsgToken == ExportKeys.DeviceMainView) { var devTmp = args.Parameter as object[]; if (devTmp != null && devTmp.Length == 2) { PreCacheToken delToken = new PreCacheToken(devTmp[0].ToString(), ExportKeys.DeviceMainView); if (!SystemContext.Instance.CurCacheViews.TryGetFirstView(delToken, out targetView)) { targetView = NavigationViewCreater.CreateView(args.MsgToken, devTmp[1]); SystemContext.Instance.CurCacheViews.AddViewCache(delToken, targetView); } targetView.Title = devTmp[0].ToString(); //此处暂用Tag存储Device.ID targetView.Tag = devTmp[1]; } } else { targetView = NavigationViewCreater.CreateView(args.MsgToken, args.Parameter); } if (targetView != null) { var newWindow = WindowHelper.Instance.CreateShellWindow(targetView, args.ShowInTaskBar, Application.Current.MainWindow); if (args.MsgToken == ExportKeys.DeviceMainView) { //此处暂用Tag存储Device.ID newWindow.Tag = targetView.Tag; newWindow.IsBackWindow = true; newWindow.Width = 1500; newWindow.Height = 1000; newWindow.SizeToContent = SizeToContent.Manual; } newWindow.Closed += NewWindow_Closed; newWindow.Show(); } }
/// <summary> /// 设置子界面状态 /// </summary> /// <param name="isExpanded">是否展开创建案例界面</param> /// <param name="needCollapsedNavigation">是否需要折叠导航,true:折叠案例编辑界面时自动返回最后一个非案例编辑界面</param> public static void SetEditCaseViewStatus(bool isExpanded, bool needCollapsedNavigation = true) { CurEditViewOpenStatus = isExpanded; //便于以后扩展用 SubViewMsgModel curStatus = new SubViewMsgModel(isExpanded); //展开或收起案例名 SysCommonMsgArgs <SubViewMsgModel> sysArgs = new SysCommonMsgArgs <SubViewMsgModel>(SystemKeys.SetSubViewStatus); sysArgs.Parameters = curStatus; MsgAggregation.Instance.SendSysMsg <SubViewMsgModel>(sysArgs); if (isExpanded) { //展开案例编辑界面 NormalNavigationArgs args = NormalNavigationArgs.CreateMainViewNavigationArgs(ExportKeys.CaseCreationView, null); MsgAggregation.Instance.SendNavigationMsgForMainView(args); } else if (needCollapsedNavigation) { /* * TODO * 此处特殊处理 * 因为案例编辑界面是固定的子界面 * 同时为了防止返回时界面状态丢失 * 所以将打开案例管理界面之前的界面缓存 * 在发送导航消息时【参数就是缓存的上一个界面】 * * beforeViewOnIsExpanded==null:刚启动程序,登录进入主界面。由于逻辑问题会在登录后执行一次返回 * */ //折叠,还原为上个界面 var beforeViewKey = NavigationLogHelper.GetBeforeViewKeyBySkipKeyAtMainView(ExportKeys.CaseCreationView); if (!string.IsNullOrWhiteSpace(beforeViewKey)) { NormalNavigationArgs args = beforeViewOnIsExpanded == null? NormalNavigationArgs.CreateMainViewNavigationArgs(beforeViewKey, null) : NormalNavigationArgs.CreateMainViewNavigationArgs(beforeViewKey, beforeViewOnIsExpanded, true); MsgAggregation.Instance.SendNavigationMsgForMainView(args); } } }
/// <summary> /// 主界面导航 /// </summary> /// <param name="exportKey"></param> public void NavigationForMainWindow(string exportKey, object param = null) { NormalNavigationArgs args = NormalNavigationArgs.CreateMainViewNavigationArgs(exportKey, param); MsgAggregation.Instance.SendNavigationMsgForMainView(args); }
/// <summary> /// 添加导航记录 /// </summary> /// <param name="navigation">导航消息</param> public static void AddNavigationLog(NormalNavigationArgs navigation, bool showInNewWindow) { NavigationLogStatus logEmt = new NavigationLogStatus(showInNewWindow, navigation.MsgToken); _historyExportKeys.Add(logEmt); }