Ver código fonte

综合-补充全局异常捕获,补充最近文件列表

ZhouJieSheng 2 anos atrás
pai
commit
334e72816b

+ 2 - 3
PDF Office/App.xaml

@@ -145,7 +145,6 @@
                             <ControlTemplate.Triggers>
                                 <Trigger Property="Role" Value="TopLevelHeader">
                                     <Setter Property="Padding" Value="6,1" />
-                                    <Setter Property="Background" Value="Transparent" />
                                     <Setter TargetName="SubMenuPopup" Property="Placement" Value="Bottom" />
                                     <Setter TargetName="ColIcon" Property="MinWidth" Value="0" />
                                     <Setter TargetName="ColNext" Property="Width" Value="Auto" />
@@ -164,7 +163,7 @@
                                         <Condition Property="Role" Value="TopLevelHeader" />
                                     </MultiTrigger.Conditions>
                                     <MultiTrigger.Setters>
-                                        <Setter TargetName="Border" Property="Background" Value="#0cffffff" />
+                                        <Setter TargetName="Border" Property="Background" Value="{StaticResource color.sys.layout.mg}" />
                                     </MultiTrigger.Setters>
                                 </MultiTrigger>
                                 <Trigger Property="Role" Value="TopLevelItem">
@@ -226,7 +225,7 @@
                             </Border>
                             <ControlTemplate.Triggers>
                                 <Trigger Property="IsMouseOver" Value="true">
-                                    <Setter TargetName="Border" Property="Background" Value="#ffffff" />
+                                    <Setter TargetName="Border" Property="Background" Value="{StaticResource color.sys.layout.mg}" />
                                 </Trigger>
                             </ControlTemplate.Triggers>
                         </ControlTemplate>

+ 33 - 0
PDF Office/App.xaml.cs

@@ -56,6 +56,7 @@ using PDF_Office.Views.PropertyPanel.Scan;
 using PDF_Office.Views.Dialog.Redaction;
 using PDF_Office.Views.Scan;
 using PDF_Office.Views.TipContent;
+using System.Windows.Threading;
 
 namespace PDF_Office
 {
@@ -139,9 +140,41 @@ namespace PDF_Office
             {
             }
 
+            //增加全局异常捕获
+            //UI线程异常
+            this.DispatcherUnhandledException += App_DispatcherUnhandledException;
+            //非UI线程异常
+            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+            //Task线程内
+            TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
+
             base.OnStartup(e);
         }
 
+        private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
+        {
+            var ex = e.Exception as Exception;
+            if (ex != null)
+            {
+                MessageBox.Show("发生Task未处理异常:" + ex.Message + "\n" + ex.StackTrace, "系统错误", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
+        }
+
+        private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+        {
+            if (e.ExceptionObject is System.Exception)
+            {
+                Exception ex = (System.Exception)e.ExceptionObject;
+                MessageBox.Show("发生非UI线程异常:" + ex.Message + "\n" + ex.StackTrace, "系统错误", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
+        }
+
+        private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
+        {
+            e.Handled = true;
+            MessageBox.Show("发生UI线程异常:" + e.Exception.Message + "\n" + e.Exception.StackTrace, "系统错误", MessageBoxButton.OK, MessageBoxImage.Error);
+        }
+
         /// <summary>
         /// 创建启动窗口
         /// </summary>

+ 1 - 0
PDF Office/ViewModels/HomeContentViewModel.cs

@@ -233,6 +233,7 @@ namespace PDF_Office.ViewModels
             if (mainVM != null)
             {
                 mainContentViewModel = mainVM;
+                mainContentViewModel.homeContentViewModel = this;
             }
 
             toolregion.RequestNavigate(ToolRegionName, "Guid");

+ 11 - 2
PDF Office/ViewModels/MainContentViewModel.cs

@@ -86,6 +86,8 @@ namespace PDF_Office.ViewModels
 
         public MainWindowViewModel mainWindowViewModel { get; set; }
 
+        public HomeContentViewModel homeContentViewModel { get; set; }
+
 
         private string regionName;
 
@@ -184,8 +186,15 @@ namespace PDF_Office.ViewModels
 
         private void CloseTabItem(object item)
         {
-            App.mainWindowViewModel?.CloseTabItem(item);
-            App.OpenedFileList.Remove(FilePath);
+            if (item == null)
+            {
+                App.mainWindowViewModel?.CloseTabItem(mainWindowViewModel.SelectedItem);
+            }
+            else
+            {
+                App.mainWindowViewModel?.CloseTabItem(item);
+                App.OpenedFileList.Remove(FilePath);
+            }
         }
 
 

+ 12 - 0
PDF Office/ViewModels/ViewContentViewModel.cs

@@ -522,6 +522,8 @@ namespace PDF_Office.ViewModels
 
         public DelegateCommand<string> ConvertCommand { get; set; }
 
+        public DelegateCommand CloseWindowCommand { get; set; }
+
         #endregion 命令
 
         public ViewContentViewModel(IRegionManager regionManager, IDialogService dialogService, IEventAggregator eventAggregator)
@@ -546,6 +548,7 @@ namespace PDF_Office.ViewModels
             EncryptCommand = new DelegateCommand(encrypt);
             DecryptCommand = new DelegateCommand(decrypt);
             ConvertCommand = new DelegateCommand<string>(convert);
+            CloseWindowCommand = new DelegateCommand(closeWindow);
 
             ViwerRegionName = RegionNames.ViwerRegionName;
             SplitViewerRegionName = RegionNames.Viewer_SplitRegionName;
@@ -590,6 +593,14 @@ namespace PDF_Office.ViewModels
             EnterSelectedBar("TabItemAnnotation");
         }
 
+        /// <summary>
+        /// 关闭当前窗体
+        /// </summary>
+        private void closeWindow()
+        {
+            App.Current.MainWindow.Close();
+        }
+
         /// <summary>
         /// 转档
         /// </summary>
@@ -1294,6 +1305,7 @@ namespace PDF_Office.ViewModels
             CanSave = PDFViewer.UndoManager.CanSave;
             CanUndo = PDFViewer.UndoManager.CanUndo;
             CanRedo = PDFViewer.UndoManager.CanRedo;
+            region.Regions[ViwerRegionName].RemoveAll();
             region.AddToRegion(ViwerRegionName, PDFViewer);
         }
 

+ 2 - 1
PDF Office/Views/Tools/AnnotToolContent.xaml.cs

@@ -47,7 +47,8 @@ namespace PDF_Office.Views.Tools
             foreach (var item in ToolPanel.Children)
             {
                 CustomIconToggleBtn checkBtn = item as CustomIconToggleBtn;
-                if (checkBtn != null && checkBtn != keepBtn)
+                //排除显示注释类型按钮
+                if (checkBtn != null && checkBtn != keepBtn&&checkBtn.Name!= "BtnShowAnnot")
                 {
                     checkBtn.IsChecked = false;
                 }

+ 30 - 8
PDF Office/Views/ViewContent.xaml

@@ -60,13 +60,26 @@
                     ToolTip="File">
                     <Button.ContextMenu>
                         <ContextMenu Name="FileMenu">
-                            <MenuItem Header="Open Files" InputGestureText="Ctrl+O" />
-                            <MenuItem Header="Open Recent">
-                                <MenuItem />
+                            <MenuItem
+                                Command="{Binding mainViewModel.homeContentViewModel.OpenFileCommand}"
+                                Header="Open Files"
+                                InputGestureText="Ctrl+O" />
+                            <MenuItem
+                                Name="MenuRecent"
+                                Header="Open Recent"
+                                Loaded="MenuRecent_Loaded">
+                                <Separator Name="Menu_Separator" Style="{StaticResource HorizontalSeparatorStyle}" />
+                                <MenuItem Name="MenuDeleteAll" Header="Delete All" Click="MenuDeleteAll_Click" />
                             </MenuItem>
                             <Separator Margin="8,0" Style="{StaticResource HorizontalSeparatorStyle}" />
-                            <MenuItem Header="Create Files" />
-                            <MenuItem Header="New Tab" InputGestureText="Ctrl+T" />
+                            <MenuItem Header="Create Files">
+                                <MenuItem Command="{Binding mainViewModel.homeContentViewModel.CreateBlackPDFCommand}" Header="Create Blank" />
+                                <MenuItem Command="{Binding mainViewModel.homeContentViewModel.CreateFromHtmlCommnd}" Header="Create Form Html" />
+                            </MenuItem>
+                            <MenuItem
+                                Command="{Binding mainViewModel.mainWindowViewModel.AddTab}"
+                                Header="New Tab"
+                                InputGestureText="Ctrl+T" />
                             <MenuItem Command="{Binding MergeFileCommand}" Header="Merge PDF Files" />
                             <Separator Margin="8,0" Style="{StaticResource HorizontalSeparatorStyle}" />
                             <MenuItem
@@ -77,7 +90,10 @@
                                 Command="{Binding SaveAsFile}"
                                 Header="Save As"
                                 InputGestureText="Ctrl+Shift+S" />
-                            <MenuItem Command="{Binding SaveAsFlattenCommand}" Header="Save as Flattened PDF" Visibility="Collapsed" />
+                            <MenuItem
+                                Command="{Binding SaveAsFlattenCommand}"
+                                Header="Save as Flattened PDF"
+                                Visibility="Collapsed" />
                             <MenuItem Command="{Binding CompressCommand}" Header="Compress" />
                             <MenuItem Header="Convert To">
                                 <MenuItem
@@ -114,8 +130,14 @@
                                     Header="图片" />
                             </MenuItem>
                             <Separator Margin="8,0" Style="{StaticResource HorizontalSeparatorStyle}" />
-                            <MenuItem Header="Close Window" InputGestureText="Ctrl+Shift+W" />
-                            <MenuItem Header="Close Tab" InputGestureText="Ctrl+W" />
+                            <MenuItem
+                                Command="{Binding CloseWindowCommand}"
+                                Header="Close Window"
+                                InputGestureText="Ctrl+Shift+W" />
+                            <MenuItem
+                                Command="{Binding mainViewModel.CloseTab}"
+                                Header="Close Tab"
+                                InputGestureText="Ctrl+W" />
                             <Separator Margin="8,0" Style="{StaticResource HorizontalSeparatorStyle}" />
                             <MenuItem Command="{Binding EncryptCommand}" Header="Set Passwords" />
                             <MenuItem Command="{Binding DecryptCommand}" Header="Remove Security" />

+ 49 - 0
PDF Office/Views/ViewContent.xaml.cs

@@ -1,6 +1,7 @@
 using ComPDFKitViewer;
 using ComPDFKitViewer.PdfViewer;
 using PDF_Office.EventAggregators;
+using PDF_Office.Helper;
 using PDF_Office.Model;
 using PDF_Office.ViewModels;
 using PDF_Office.ViewModels.Tools;
@@ -160,5 +161,53 @@ namespace PDF_Office.Views
         {
 
         }
+
+        private void MenuRecent_Loaded(object sender, RoutedEventArgs e)
+        {
+            int count = 0;
+            MenuRecent.Items.Clear();
+            foreach (var file in Properties.Settings.Default.RecentOpenFiles)
+            {
+                MenuItem item = new MenuItem();
+                item.Height = 32;
+                item.Header = file.FileName;
+                item.Tag = file.FilePath;
+                item.ToolTip = file.FilePath;
+
+                item.Click += RecentItem_Click;
+                MenuRecent.Items.Insert(MenuRecent.Items.Count, item);
+
+                count++;
+                if (count >= 20)
+                    break;
+            }
+
+            if (Properties.Settings.Default.RecentOpenFiles.Count > 0)
+            {
+                MenuRecent.Items.Add(Menu_Separator);
+                MenuRecent.Items.Add(MenuDeleteAll);
+                MenuDeleteAll.IsEnabled = true;
+                MenuDeleteAll.Opacity = 1;
+            }
+            else
+            {
+                MenuRecent.Items.Add(MenuDeleteAll);
+                MenuDeleteAll.IsEnabled = false;
+                MenuDeleteAll.Opacity = 0.5;
+            }
+        }
+
+        private void RecentItem_Click(object sender, RoutedEventArgs e)
+        {
+            var item = sender as MenuItem;
+            string[] filePath = new string[1];
+            filePath[0] = item.Tag.ToString();
+            (this.DataContext as ViewContentViewModel).mainViewModel.OpenFile(filePath[0]);
+        }
+
+        private void MenuDeleteAll_Click(object sender, RoutedEventArgs e)
+        {
+            SettingHelper.RemoveAllRecentOpenFiles();
+        }
     }
 }