using System; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Forms; using Bricscad.ApplicationServices; using Bricscad.Ribbon; using Bricscad.Windows; using Prism.Events; using Prism.Ioc; using Prism.Services.Dialogs; using SWS.Commons; using SWS.Electrical; using SWS.Electrical.Views; using SWS.Service; using SWS.WPF.ViewModels; using SWS.WPF.Views; using Teigha.Runtime; using Telerik.Windows.Controls; using Unity; using Application = Bricscad.ApplicationServices.Application; using DialogParameters = Prism.Services.Dialogs.DialogParameters; using MessageBox = System.Windows.Forms.MessageBox; [assembly: CommandClass(typeof(Commands))] [assembly: ExtensionApplication(typeof(Commands))] namespace SWS.Electrical { public partial class Commands : IExtensionApplication { public void Initialize() { try { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; if (RibbonServices.RibbonPaletteSet == null) RibbonServices.CreateRibbonPaletteSet(); Start.RegisterTypes(); Start.AutoLogin(); // 延迟初始化UI组件 InitializeCustomUI(); System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); timer.Interval = 50; // 50ms延迟 timer.Tick += (s, e) => { timer.Stop(); var ribbonControl = ComponentManager.Ribbon; if (ribbonControl != null) { //先切换到常用标签,再切换到电气系统标签 ribbonControl.Tabs[0].IsActive = true; Thread.Sleep(5); foreach (var tab in ribbonControl.Tabs) { if (tab.Name == "Electric") { // 激活选项卡 tab.IsActive = true; } } } }; timer.Start(); if (System.Windows.Application.Current == null) { var app = new System.Windows.Application { // 设置为显式关闭,防止窗口关闭时 Application 被自动终结 ShutdownMode = ShutdownMode.OnExplicitShutdown }; } GlobalObject.ClearLog(); } catch (System.Exception e) { Application.ShowAlertDialog(" An exception occurred in Initialize():\n" + e.ToString()); } } private void InitializeCustomUI() { try { //在这里初始化你的自定义UI AddTab(); } catch (System.Exception ex) { LoggerHelper.Current.Error("UI初始化失败: " + ex.Message); } } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { // 记录异常信息到日志文件,这里简单打印到控制 ? System.Exception ex = e.ExceptionObject as System.Exception; LoggerHelper.Current.Error($"发生未处理的异常: {ex.Message}"); LoggerHelper.Current.Error($"异常信息: {ex.ToString()}"); LoggerHelper.Current.Error($"异常堆栈跟踪: {ex.StackTrace}"); // 关闭所有打开的对话框窗口 // 提示用户发生了错 ? var result= MessageBox.Show("发生错误,是否打开日志文件以获取更多信息?", "错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); if(result== System.Windows.Forms.DialogResult.OK) { System.Diagnostics.Process.Start("explorer.exe", GlobalObject.GetLogPath()); } } catch (System.Exception innerEx) { // 如果在处理异常时又发生了异常,简单打印信 ? LoggerHelper.Current.Error($"处理异常时发生错: {innerEx.Message}"); } } void AddTab() { RibbonControl rbnCtrl = ComponentManager.Ribbon; //整个上面都是ribbon,比如莫工做的电气系统,就是ribbon中的一个tab if (rbnCtrl == null) return; #region create Ribbon tab RibbonTab tab1 = new RibbonTab(); tab1.Title = "电气扩展"; tab1.Id = "电气扩展"; rbnCtrl.Tabs.Add(tab1);//一个就行了 #endregion #region Ribbon 测试 RibbonPanelSource dataSource = new RibbonPanelSource(); dataSource.Title = "测试"; dataSource.Id = "测试"; RibbonPanel dataPanel = new RibbonPanel(); dataPanel.Source = dataSource; tab1.Panels.Add(dataPanel); //垂直排列按钮panel RibbonRowPanel ribbonRowPanel = new RibbonRowPanel(); #region buttons 测试绘图 RibbonButton btnMenu = new RibbonButton(); btnMenu.ToolTip = "测试绘图"; btnMenu.Text = "测试绘图"; btnMenu.ButtonStyle = RibbonButtonStyle.SmallWithText; btnMenu.CommandHandler = new DelegateCommand(async x => { //打开窗体 try { var flag = await GlobalObj.CheckLogin(); if (!flag) { MessageBox.Show("登录已过期,请重新登录!"); return; } IDialogParameters para = new DialogParameters(); para.Add(GlobalObject.dialogPar.para1.ToString(), "aaaa"); var _dialogService = GlobalObject._prismContainer.Resolve(); _dialogService.ShowDialog(nameof(DialogTest2), para, (RES) => { //var res = RES.Parameters.GetValue(GlobalObject.dialogPar.para1.ToString()); //if (RES.Result == ButtonResult.Yes) //{ // MessageBox.Show("窗体Yes关闭,返回:" + res); //} //else if (RES.Result == ButtonResult.No) //{ MessageBox.Show("窗体NO关闭,返回:" + res); } }); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }); btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("OpenProject.png"); btnMenu.Id = "选择项目"; ribbonRowPanel.Items.Add(btnMenu); ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列 #endregion dataSource.Items.Add(ribbonRowPanel); #endregion #region Ribbon 信号管理 dataSource = new RibbonPanelSource(); dataSource.Title = "信号管理"; dataSource.Id = "信号管理"; dataPanel = new RibbonPanel(); dataPanel.Source = dataSource; tab1.Panels.Add(dataPanel); //垂直排列按钮panel ribbonRowPanel = new RibbonRowPanel(); #region buttons 信号管理 btnMenu = new RibbonButton(); btnMenu.ToolTip = "信号管理"; btnMenu.Text = "信号管理"; btnMenu.ButtonStyle = RibbonButtonStyle.SmallWithText; btnMenu.CommandHandler = new DelegateCommand(async x => { //打开窗体 try { var flag = await GlobalObj.CheckLogin(); if (!flag) { MessageBox.Show("登录已过期,请重新登录!"); return; } var para = new DialogParameters(); var _dialogService = GlobalObject._prismContainer.Resolve(); _dialogService.ShowDialog(nameof(DialogSignalManagement), para, (RES) => { }); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }); btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("SinalManage.png"); btnMenu.Id = "信号管理"; ribbonRowPanel.Items.Add(btnMenu); ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列 #endregion dataSource.Items.Add(ribbonRowPanel); #endregion #region Ribbon 绘图管理 dataSource = new RibbonPanelSource(); dataSource.Title = "绘图管理"; dataSource.Id = "绘图管理"; dataPanel = new RibbonPanel(); dataPanel.Source = dataSource; tab1.Panels.Add(dataPanel); //垂直排列按钮panel ribbonRowPanel = new RibbonRowPanel(); #region buttons 布置图自动绘制 btnMenu = new RibbonButton(); btnMenu.ToolTip = "布置图自动绘制"; btnMenu.Text = "布置图自动绘制"; btnMenu.ButtonStyle = RibbonButtonStyle.SmallWithText; btnMenu.CommandHandler = new DelegateCommand(async x => { //打开窗体 try { var flag = await GlobalObj.CheckLogin(); if (!flag) { MessageBox.Show("登录已过期,请重新登录!"); return; } var para = new DialogParameters(); var _dialogService = GlobalObject._prismContainer.Resolve(); _dialogService.ShowDialog(nameof(DialogAutoArrangeLayout), para, (RES) => { }); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }); btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("PlaneLayout.png"); btnMenu.Id = "绘图管理"; ribbonRowPanel.Items.Add(btnMenu); ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列 #endregion dataSource.Items.Add(ribbonRowPanel); #endregion #region Ribbon 材料管理 dataSource = new RibbonPanelSource(); dataSource.Title = "材料表管理"; dataSource.Id = "材料表管理"; dataPanel = new RibbonPanel(); dataPanel.Source = dataSource; tab1.Panels.Add(dataPanel); //垂直排列按钮panel ribbonRowPanel = new RibbonRowPanel(); #region buttons 材料表自动生成 btnMenu = new RibbonButton(); btnMenu.ToolTip = "材料表自动生成"; btnMenu.Text = "材料表自动生成"; btnMenu.ButtonStyle = RibbonButtonStyle.SmallWithText; btnMenu.CommandHandler = new DelegateCommand(async x => { //打开窗体 try { var flag = await GlobalObj.CheckLogin(); if (!flag) { MessageBox.Show("登录已过期,请重新登录!"); return; } var para = new DialogParameters(); var _dialogService = GlobalObject._prismContainer.Resolve(); _dialogService.ShowDialog(nameof(DialogGenerateBOM), para, (RES) => { }); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }); btnMenu.Image = GlobalObject.ImageSourceFromEmbeddedResourceStream("CableSinal.png"); btnMenu.Id = "材料表管理"; ribbonRowPanel.Items.Add(btnMenu); ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列 #endregion dataSource.Items.Add(ribbonRowPanel); #endregion } public void Terminate() { } } }