示例#1
0
        /// <summary>
        /// 页面导航跳转,生成新页面
        /// </summary>
        /// <param name="viewInfo">页面信息</param>
        private void navigate(ViewInfo viewInfo)
        {
            Application.Current.MainWindow.Cursor = Cursors.Wait;

            UserControlBase view = null;

            if (Equals(viewInfo, null))
            {
                Application.Current.Resources["UiMessage"] = "未找到页面信息,请确认MenuFunctionViewInfoMap.json配置正确!";
                LogHelper.Info(Application.Current.Resources["UiMessage"].ToString());
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                return;
            }
            //已经打开则激活
            if (layoutDocumentPane.Children.Any(a => a.Title == viewInfo.DisplayName.ToString()))
            {
                var tmp = layoutDocumentPane.Children.FirstOrDefault(a => a.Title == viewInfo.DisplayName.ToString());
                tmp.IsActive = true;

                Application.Current.Resources["UiMessage"] = $"{viewInfo.DisplayName} 页面已经打开,设置激活成功!";
                Application.Current.MainWindow.Cursor      = Cursors.Arrow;

                return;
            }

            try
            {
                view = System.Reflection.Assembly.Load(viewInfo.ViewAssemblyName)
                       .CreateInstance(viewInfo.ViewName) as UserControlBase;
            }
            catch (Exception ex)
            {
                Application.Current.Resources["UiMessage"] = "未找到页面:" + viewInfo.ViewName + ex.Message;
                LogHelper.Error(Application.Current.Resources["UiMessage"] + viewInfo.ToString(), ex);
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                return;
            }

            if (Equals(view, null))
            {
                Application.Current.Resources["UiMessage"] = "未找到页面:" + viewInfo.ViewName;
                LogHelper.Info(Application.Current.Resources["UiMessage"] + viewInfo.ToString());
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                return;
            }

            VmBase viewModel = null;

            try
            {
                viewModel = System.Reflection.Assembly.Load(viewInfo.ViewModelAssemblyName)
                            .CreateInstance(viewInfo.ViewModelName) as VmBase;
            }
            catch (Exception ex)
            {
                Application.Current.Resources["UiMessage"] = "未找到ViewModel:" + viewInfo.ViewModelName;
                LogHelper.Error(Application.Current.Resources["UiMessage"] + viewInfo.ToString(), ex);
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                return;
            }
            if (Equals(viewModel, null))
            {
                Application.Current.Resources["UiMessage"] = "未找到ViewModel:" + viewInfo.ViewModelName;
                LogHelper.Info(Application.Current.Resources["UiMessage"] + viewInfo.ToString());
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                return;
            }
            //Application.Current.Resources["UiMessage"] = viewInfo.DisplayName;
            //LogHelper.Info(Application.Current.Resources["UiMessage"] + viewInfo.ToString());
            //view.Parameter = viewInfo.Parameter;
            //viewModel.Parameter = view.Parameter;
            viewModel.Parameter  = viewInfo.Parameter;
            viewModel.MenuModule = viewInfo.MenuModule;
            view.DataContext     = viewModel;
            //根据页面类型生成页面
            switch (viewInfo.ViewType)
            {
            case ViewType.PopupNoTitle:     //没有标题栏的页面
                MahApps.Metro.Controls.MetroWindow popupNoTitleWindows = new MahApps.Metro.Controls.MetroWindow();
                popupNoTitleWindows.WindowStartupLocation = WindowStartupLocation.CenterOwner;
                popupNoTitleWindows.Style                 = Utility.Windows.ResourceHelper.FindResource(@"CleanWindowStyleKey") as Style;
                popupNoTitleWindows.GlowBrush             = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush;
                popupNoTitleWindows.Owner                 = Application.Current.MainWindow.IsInitialized == false ? null : Application.Current.MainWindow;
                popupNoTitleWindows.ResizeMode            = ResizeMode.NoResize;
                popupNoTitleWindows.IsCloseButtonEnabled  = false;
                popupNoTitleWindows.ShowInTaskbar         = popupNoTitleWindows.Owner == null ? true : false;
                popupNoTitleWindows.MouseDown            += PopupWindows_MouseDown;
                popupNoTitleWindows.ShowCloseButton       = false;
                popupNoTitleWindows.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                popupNoTitleWindows.Width                 = view.Width;
                popupNoTitleWindows.Height                = view.Height;
                popupNoTitleWindows.TitlebarHeight        = 0;
                //有限实用配置的图标,没有则使用默认的图标,没有则使用主窗体的
                popupNoTitleWindows.Icon =
                    Utility.Windows.BitmapImageHelper.GetBitmapImage(viewInfo.Icon)
                    ?? Utility.Windows.BitmapImageHelper.GetBitmapImage(@"pack://*****:*****@"CleanWindowStyleKey") as Style;
                popupWindows.GlowBrush            = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush;
                popupWindows.Owner                = Application.Current.MainWindow.IsInitialized == false ? null : Application.Current.MainWindow;
                popupWindows.ResizeMode           = ResizeMode.NoResize;
                popupWindows.IsCloseButtonEnabled = false;
                popupWindows.ShowCloseButton      = false;
                popupWindows.Width                = view.Width;
                popupWindows.Height               = view.Height;
                popupWindows.Title                = viewInfo.DisplayName;
                //有则使用配置的图标,没有则使用默认的图标,再没有则使用主窗体的图标
                popupWindows.Icon =
                    Utility.Windows.BitmapImageHelper.GetBitmapImage(viewInfo.Icon)
                    ?? Utility.Windows.BitmapImageHelper.GetBitmapImage(@"pack://*****:*****@"pack://application:,,,/Solution.Desktop.Resource;component/Images/logo_16x16.ico")
                    ?? Application.Current.MainWindow.Icon;
                layoutDocument.Content = view;
                layoutDocumentPane.Children.Add(layoutDocument);
                layoutDocument.IsActive = true;
                layoutDocument.Closed  += LayoutDocument_Closed;
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                break;

            case ViewType.SingleWindow:    //单个视图。主要为了显示帮助窗口
                MahApps.Metro.Controls.MetroWindow singleWindows = new MahApps.Metro.Controls.MetroWindow();
                singleWindows.TitlebarHeight        = 23;
                singleWindows.WindowStartupLocation = WindowStartupLocation.CenterOwner;
                singleWindows.Style     = Utility.Windows.ResourceHelper.FindResource(@"CleanWindowStyleKey") as Style;
                singleWindows.GlowBrush = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush;
                singleWindows.Content   = view;
                singleWindows.Width     = view.Width;
                singleWindows.Height    = view.Height;
                singleWindows.Title     = viewInfo.DisplayName;
                //有则使用配置的图标,没有则使用默认的图标,再没有则使用主窗体的图标
                singleWindows.Icon =
                    Utility.Windows.BitmapImageHelper.GetBitmapImage(viewInfo.Icon)
                    ?? Utility.Windows.BitmapImageHelper.GetBitmapImage(@"pack://application:,,,/Solution.Desktop.Resource;component/Images/logo_16x16.ico")
                    ?? Application.Current.MainWindow.Icon;
                singleWindows.Closed += Window_Closed;

                singleWindows.Show();
                singleWindows.Focus();
                Application.Current.MainWindow.Cursor = Cursors.Arrow;
                break;
            }
        }