コード例 #1
0
        /// <summary>
        /// 创建消息参数
        /// </summary>
        /// <param name="exportViewkey"></param>
        /// <param name="parameter">传递的参数</param>
        public static UcViewBase CreateView(string exportViewkey, object parameter)
        {
            UcViewBase targetView = null;

            if (!string.IsNullOrEmpty(exportViewkey))
            {
                targetView = IocManagerSingle.Instance.GetViewPart(exportViewkey);
                if (targetView != null)
                {
                    //传递参数
                    if (targetView.DataSource != null && !targetView.DataSource.IsLoaded)
                    {
                        try
                        {
                            targetView.DataSource?.LoadViewModel(parameter);
                            //加载ViewContainer
                            targetView.DataSource?.SetViewContainer(targetView);
                        }
                        catch (Exception ex)
                        {
                            LoggerManagerSingle.Instance.Error(ex, string.Format("加载模块Key【{0}】失败", exportViewkey));
                        }
                    }
                }
                else
                {
                    LoggerManagerSingle.Instance.Error(string.Format("导入模块Key【{0}】失败", exportViewkey));
                }
            }
            return(targetView);
        }
コード例 #2
0
 /// <summary>
 /// 创建消息参数
 /// </summary>
 /// <param name="exportViewkey"></param>
 /// <param name="parameter">传递的参数</param>
 private void CreateParameter(string exportViewkey, object parameter = null)
 {
     if (!string.IsNullOrEmpty(exportViewkey))
     {
         var view = IocManagerSingle.Instance.GetViewPart(exportViewkey);
         if (view != null)
         {
             //传递参数
             if (!view.DataSource.IsLoaded)
             {
                 try
                 {
                     view.DataSource.LoadViewModel(parameter);
                 }
                 catch (Exception ex)
                 {
                     LoggerManagerSingle.Instance.Error(ex, string.Format("加载模块Key【{0}】失败", exportViewkey));
                     return;
                 }
             }
             this.ViewModelID = view.DataSource.ViewModelID;
             //加载ViewContainer
             view.DataSource.SetViewContainer(view);
             this.View     = view;
             base.MsgToken = exportViewkey;
         }
         else
         {
             LoggerManagerSingle.Instance.Error(string.Format("导入模块Key【{0}】失败", exportViewkey));
         }
     }
 }
コード例 #3
0
 /// <summary>
 /// 添加视图缓存
 /// </summary>
 /// <param name="token">标识</param>
 /// <param name="view">视图</param>
 public void AddViewCache(TToken token, UcViewBase view)
 {
     if (!_curCacheItems.ContainsKey(token))
     {
         _curCacheItems.Add(token, new NavigationViewElement(view));
     }
 }
コード例 #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;
        }
コード例 #5
0
        //打开非模式对话框
        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="token">标识</param>
        /// <param name="cacheView">缓存的视图</param>
        /// <returns></returns>
        public bool TryGetFirstView(TToken token, out UcViewBase cacheView)
        {
            bool hasView = false;

            if (_curCacheItems.ContainsKey(token))
            {
                hasView   = true;
                cacheView = _curCacheItems[token].View;
            }
            else
            {
                cacheView = null;
            }

            return(hasView);
        }
コード例 #7
0
        /// <summary>
        /// 创建新窗口
        /// </summary>
        /// <param name="view">显示内容</param>
        /// <returns></returns>
        private Shell CreateNewWindow(UcViewBase view, Window owner = null)
        {
            Shell newWindow = new Shell();

            if (view != null)
            {
                newWindow.WindowState = view.IsMaxView ? WindowState.Maximized : WindowState.Normal;
                //newWindow.SizeToContent = view.IsMaxView ? SizeToContent.WidthAndHeight: SizeToContent.Manual;
                newWindow.Title              = view.Title ?? "";
                newWindow.Content            = view;
                newWindow.Owner              = owner;
                newWindow.AllowsTransparency = true;
                newWindow.WindowStyle        = WindowStyle.None;
                newWindow.ResizeMode         = ResizeMode.NoResize;
                newWindow.ShowInTaskbar      = false;
                newWindow.Closed            += newWindow_Closed;
            }
            return(newWindow);
        }
コード例 #8
0
 /// <summary>
 /// 创建消息参数
 /// </summary>
 /// <param name="args">导航消息</param>
 /// <param name="targetView">导航的目标View</param>
 public static bool CreateNavigationView(NavigationArgs args, out UcViewBase targetView)
 {
     targetView = null;
     if (args != null && !string.IsNullOrEmpty(args.MsgToken))
     {
         //当前项目未添加必要引用,所以此处暂用try catch
         targetView = IocManagerSingle.Instance.GetViewPart(args.MsgToken);
         try
         {
             //传递参数
             if (!targetView.DataSource.IsLoaded)
             {
                 targetView.DataSource.LoadViewModel(args.InitParameter);
             }
         }
         catch (Exception ex)
         {
             LoggerManagerSingle.Instance.Error(ex, string.Format("加载模块Key【{0}】失败", args.MsgToken));
             return(false);
         }
     }
     return(true);
 }
コード例 #9
0
ファイル: WindowHelper.cs プロジェクト: uvbs/M_Y_P_F_P_R_O
        /// <summary>
        /// 创建窗体
        /// </summary>
        /// <param name="view">显示内容</param>
        /// <param name="owner">父窗体</param>
        /// <returns></returns>
        public Shell CreateShellWindow(UcViewBase view, bool showInTaskBar, Window owner = null)
        {
            Shell newWindow = null;

            if (view != null)
            {
                newWindow             = new Shell();
                newWindow.WindowState = view.IsMaxView ? WindowState.Maximized : WindowState.Normal;
                Binding s = new Binding("Title")
                {
                    Source = view
                };
                newWindow.SetBinding(Window.TitleProperty, s);
                newWindow.ShowMaxsize = newWindow.ShowMinsize = view.NeedMaxsizeAndMinsize;
                if (view.Height > 0 && view.Width > 0)
                {
                    //TODO
                    //此处由于阴影问题,所以需要给实际展示内容增加80像素
                    newWindow.Width  = view.Width + 40 * 2;
                    newWindow.Height = view.Height + 40 * 2;
                }
                else
                {
                    newWindow.SizeToContent = SizeToContent.WidthAndHeight;
                }
                newWindow.Content = view;
                //排除未显示的窗体
                if (owner != null && owner.Visibility != Visibility.Collapsed)
                {
                    newWindow.Owner = owner;
                }
                newWindow.ShowInTaskbar = showInTaskBar;
                this.AddWindow(newWindow);
            }
            return(newWindow);
        }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
 internal NavigationViewElement(UcViewBase view)
 {
     View = view;
 }