Explorar el Código

其他-修复打开一次性打开多个文件崩溃问题

ZhouJieSheng hace 2 años
padre
commit
e50755ed96

+ 12 - 0
PDF Office/Model/RegionNames.cs

@@ -9,6 +9,7 @@ namespace PDF_Office.Model
 {
     /// <summary>
     /// 存放公用模块的RegionName
+    /// 引用名称前 先查一下所有引用 看是否有其他地方引用了同样的名称,同一个页签内的控件不要使用同一个名称
     /// </summary>
     public static class RegionNames
     {
@@ -39,6 +40,17 @@ namespace PDF_Office.Model
             }
         }
 
+        /// <summary>
+        /// 阅读页 显示拆分视图整个区域 Content
+        /// </summary>
+        public static string Viewer_SplitRegionName
+        {
+            get
+            {
+                return GetRegionName("Viewer_SplitRegionName");
+            }
+        }
+
         /// <summary>
         /// 阅读页顶部Tip 对应的Content RegionName
         /// </summary>

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

@@ -139,7 +139,6 @@ namespace PDF_Office.ViewModels
                     if (!App.OpenedFileList.Contains(fileList[i]))
                     {
                         //需要加一定延时 不然连续添加多个文件时会出现regionname重名的情况 因为多处导航是异步导航,可能绑定还没更新
-                        await Task.Delay(20);
                         App.mainWindowViewModel.AddTabItem(fileList[i]);
                     }
                     ToolMethod.SetFileThumbImg(fileList[i]);

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

@@ -149,18 +149,6 @@ namespace PDF_Office.ViewModels
             RenameCommand = new DelegateCommand(rename);
 
             MainContentRegionName = Guid.NewGuid().ToString();
-
-            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
-            {
-                NavigationParameters parameters = new NavigationParameters
-                {
-                    {
-                        "MainViewModel", this
-                    }
-                };
-                if (toolregion.Regions.ContainsRegionWithName(MainContentRegionName))
-                    toolregion.RequestNavigate(MainContentRegionName, "HomeContent", parameters);
-            }));
         }
 
         /// <summary>
@@ -237,11 +225,8 @@ namespace PDF_Office.ViewModels
                 { ParameterNames.MainViewModel, this },
                 { ParameterNames.PDFViewer,PDFViewer}
             };
-            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
-            {
-                //if (toolregion.Regions.ContainsRegionWithName(MainContentRegionName))
-                toolregion.RequestNavigate(MainContentRegionName, "ViewContent", parameters);
-            }));
+            
+            toolregion.RequestNavigate(MainContentRegionName, "ViewContent", parameters);
 
             IsReNameEnable = true;
             if(!string.IsNullOrEmpty(PDFViewer.Document.FilePath))
@@ -545,8 +530,17 @@ namespace PDF_Office.ViewModels
             mainWindowViewModel = App.mainWindowViewModel;
             //常规加载首页的情况
             if (navigationContext.Parameters.Count <= 0)
+            {
+                NavigationParameters parameters = new NavigationParameters();
+                parameters.Add(ParameterNames.MainViewModel,this);
+                if (toolregion.Regions.ContainsRegionWithName(MainContentRegionName))
+                {
+                    toolregion.RequestNavigate(MainContentRegionName, "HomeContent", parameters);
+                }
                 return;
+            }
 
+            //一次打开多个文件的情况
             var filepath = navigationContext.Parameters[ParameterNames.FilePath].ToString();
             if (filepath!= null)
             {

+ 24 - 28
PDF Office/ViewModels/ViewContentViewModel.cs

@@ -495,7 +495,6 @@ namespace PDF_Office.ViewModels
         #endregion 命令
 
         public ViewContentViewModel(IRegionManager regionManager, IDialogService dialogService, IEventAggregator eventAggregator)
-
         {
             region = regionManager;
             dialogs = dialogService;
@@ -514,7 +513,7 @@ namespace PDF_Office.ViewModels
             TabControlSelectionChangedCommand = new DelegateCommand<object>(TabControlSelectonChangedEvent);
 
             ViwerRegionName = RegionNames.ViwerRegionName;
-            SplitViewerRegionName = RegionNames.SplitScreenViewRegionName;
+            SplitViewerRegionName = RegionNames.Viewer_SplitRegionName;
             BOTARegionName = RegionNames.BOTARegionName;
             PropertyRegionName = RegionNames.PropertyRegionName;
             BottomToolRegionName = RegionNames.BottomToolRegionName;
@@ -942,7 +941,7 @@ namespace PDF_Office.ViewModels
 
         public bool IsNavigationTarget(NavigationContext navigationContext)
         {
-            return true;
+            return false;
         }
 
         public void OnNavigatedFrom(NavigationContext navigationContext)
@@ -992,21 +991,22 @@ namespace PDF_Office.ViewModels
         private void LoadControl()
         {
             //在构造函数中使用Region需要借助Dispatcher 确保UI已经加载完成,加载BOTA区域
-            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
-                  {
-                      NavigationParameters parameters = new NavigationParameters();
-                      parameters.Add(ParameterNames.PDFViewer, PDFViewer);
-                      parameters.Add(ParameterNames.ViewContentViewModel, this);
-
-                      region.RequestNavigate(BOTARegionName, "BOTAContent", parameters);
-                      region.RequestNavigate(BottomToolRegionName, "BottomToolContent", parameters);
-                      region.RequestNavigate(ReadModeRegionName, "ReadModeContent", parameters);
-                      region.RequestNavigate(SplitViewerRegionName, "SplitScreenContent", parameters);
-                      //region.RequestNavigate(TipContentRegionName, "LinkAnnotTip", parameters);
-                      //TODO 根据上一次关闭记录的菜单,选中TabItem
-                      EnterSelectedBar("TabItemAnnotation");
-                  }
-                  ));
+            // 非必要情况不要使用该异步方法,可能会导致一次性加载多个文件时出现因异步引起的regionname 错乱问题
+            //System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
+            //      {
+            NavigationParameters parameters = new NavigationParameters();
+            parameters.Add(ParameterNames.PDFViewer, PDFViewer);
+            parameters.Add(ParameterNames.ViewContentViewModel, this);
+
+            region.RequestNavigate(BOTARegionName, "BOTAContent", parameters);
+            region.RequestNavigate(BottomToolRegionName, "BottomToolContent", parameters);
+            region.RequestNavigate(ReadModeRegionName, "ReadModeContent", parameters);
+            region.RequestNavigate(SplitViewerRegionName, "SplitScreenContent", parameters);
+            //region.RequestNavigate(TipContentRegionName, "LinkAnnotTip", parameters);
+            //TODO 根据上一次关闭记录的菜单,选中TabItem
+            EnterSelectedBar("TabItemAnnotation");
+                  //}
+                  //));
         }
 
         /// <summary>
@@ -1016,16 +1016,12 @@ namespace PDF_Office.ViewModels
         /// <param name="annotPropertyPanel"></param>
         public void SelectedPrpoertyPanel(string Content, AnnotPropertyPanel annotPropertyPanel)
         {
-            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
-                      {
-                          NavigationParameters parameters = new NavigationParameters();
-                          //传其他参数:文档类,空注释面板;
-                          parameters.Add(ParameterNames.PDFViewer, PDFViewer);
-                          parameters.Add(ParameterNames.PropertyPanelContentViewModel, annotPropertyPanel);
-                          parameters.Add(ParameterNames.ViewContentViewModel, this);
-                          region.RequestNavigate(PropertyRegionName, Content, parameters);
-                      }
-                      ));
+            NavigationParameters parameters = new NavigationParameters();
+            //传其他参数:文档类,空注释面板;
+            parameters.Add(ParameterNames.PDFViewer, PDFViewer);
+            parameters.Add(ParameterNames.PropertyPanelContentViewModel, annotPropertyPanel);
+            parameters.Add(ParameterNames.ViewContentViewModel, this);
+            region.RequestNavigate(PropertyRegionName, Content, parameters);
         }
 
         /// <summary>

+ 2 - 0
PDF Office/Views/MainContent.xaml.cs

@@ -45,6 +45,8 @@ namespace PDF_Office.Views
             InitializeComponent();
             RegionContentNames = new Dictionary<string, string>();
             Unicode = Guid.NewGuid().ToString();
+            //初始化时 更新selected 对象,比UI自动更新更快
+            App.mainWindowViewModel.SelectedItem = this;
         }
     }
 }

+ 0 - 1
PDF Office/Views/MainWindow.xaml.cs

@@ -85,7 +85,6 @@ namespace PDF_Office.Views
             aggregator?.GetEvent<DragablzWindowEvent>().Publish(new DragablzWindowEventArgs() { TabControl = TabablzControl, Type = DragablzWindowEventType.Closed });
         }
 
-        private bool isNewDocument = false;
         public void LoadPdfViewer(string[] filePaths)
         {
             var content = App.mainWindowViewModel.SelectedItem.DataContext as MainContentViewModel;