示例#1
0
 /// <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);
     });
 }
示例#2
0
        /// <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);
        }
示例#4
0
        //主界面导航回调
        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();
            }
        }
示例#6
0
        /// <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);
                }
            }
        }
示例#7
0
        /// <summary>
        /// 主界面导航
        /// </summary>
        /// <param name="exportKey"></param>
        public void NavigationForMainWindow(string exportKey, object param = null)
        {
            NormalNavigationArgs args = NormalNavigationArgs.CreateMainViewNavigationArgs(exportKey, param);

            MsgAggregation.Instance.SendNavigationMsgForMainView(args);
        }
示例#8
0
        /// <summary>
        /// 添加导航记录
        /// </summary>
        /// <param name="navigation">导航消息</param>
        public static void AddNavigationLog(NormalNavigationArgs navigation, bool showInNewWindow)
        {
            NavigationLogStatus logEmt = new NavigationLogStatus(showInNewWindow, navigation.MsgToken);

            _historyExportKeys.Add(logEmt);
        }