/// <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; } }