ReadViewContentViewModel.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using ComPDFKitViewer.PdfViewer;
  2. using PDF_Office.Model;
  3. using Prism.Commands;
  4. using Prism.Mvvm;
  5. using Prism.Regions;
  6. using Prism.Services.Dialogs;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. namespace PDF_Office.ViewModels.PropertyPanel.ViewModular
  15. {
  16. public class ReadViewContentViewModel : BindableBase, INavigationAware
  17. {
  18. public string ReadRegionName { get; set; }
  19. public string ReadModeRegionName { get; set; }
  20. public CPDFViewer PDFViewer { get; set; }
  21. private bool canSave;
  22. /// <summary>
  23. /// 是否可以保存
  24. /// </summary>
  25. public bool CanSave
  26. {
  27. get { return canSave; }
  28. set
  29. {
  30. SetProperty(ref canSave, value);
  31. }
  32. }
  33. private bool canUndo;
  34. /// <summary>
  35. /// 是否可以进行Undo
  36. /// </summary>
  37. public bool CanUndo
  38. {
  39. get { return canUndo; }
  40. set
  41. {
  42. SetProperty(ref canUndo, value);
  43. }
  44. }
  45. private bool canRedo;
  46. /// <summary>
  47. /// 是否可以进行Redo
  48. /// </summary>
  49. public bool CanRedo
  50. {
  51. get { return canRedo; }
  52. set
  53. {
  54. SetProperty(ref canRedo, value);
  55. }
  56. }
  57. private Visibility readModeContentVisibility = Visibility.Collapsed;
  58. public Visibility ReadModeContentVisibility
  59. {
  60. get { return readModeContentVisibility; }
  61. set
  62. {
  63. SetProperty(ref readModeContentVisibility, value);
  64. }
  65. }
  66. private Visibility rectangleReadModeVisibility = Visibility.Collapsed;
  67. public Visibility RectangleReadModeVisibility
  68. {
  69. get { return rectangleReadModeVisibility; }
  70. set
  71. {
  72. SetProperty(ref rectangleReadModeVisibility, value);
  73. }
  74. }
  75. public IRegionManager region;
  76. public IDialogService dialogs;
  77. /// <summary>
  78. /// 鼠标滚轮缩放的缩放值
  79. /// </summary>
  80. private double[] zoomLevel = { 1.00f, 10, 25, 50, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
  81. public DelegateCommand Load { get; set; }
  82. public ReadViewContentViewModel(IRegionManager regionManager, IDialogService dialogService)
  83. {
  84. region = regionManager;
  85. dialogs = dialogService;
  86. ReadRegionName = RegionNames.ReadRegionName;
  87. ReadModeRegionName = RegionNames.ReadModePageRegionName;
  88. ReadModeContentVisibility = Visibility.Visible;
  89. RectangleReadModeVisibility = Visibility.Collapsed;
  90. }
  91. public bool IsNavigationTarget(NavigationContext navigationContext)
  92. {
  93. return true;
  94. }
  95. public void OnNavigatedFrom(NavigationContext navigationContext)
  96. {
  97. }
  98. public void OnNavigatedTo(NavigationContext navigationContext)
  99. {
  100. var pdfview = navigationContext.Parameters[ParameterNames.PDFViewer] as CPDFViewer;
  101. if (pdfview != null)
  102. {
  103. PDFViewer = pdfview;
  104. LoadFile();
  105. }
  106. }
  107. /// <summary>
  108. /// 将PDFViwer添加到Region
  109. /// </summary>
  110. private void LoadFile()
  111. {
  112. PDFViewer.MouseWheelZoomHandler += PdfViewer_MouseWheelZoomHandler;
  113. PDFViewer.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
  114. CanSave = PDFViewer.UndoManager.CanSave;
  115. CanUndo = PDFViewer.UndoManager.CanUndo;
  116. CanRedo = PDFViewer.UndoManager.CanRedo;
  117. if (region.Regions.ContainsRegionWithName(ReadRegionName))
  118. {
  119. if (region.Regions[ReadRegionName].Views.Contains(PDFViewer))
  120. {
  121. var contentRegion = region.Regions[ReadRegionName];
  122. contentRegion.Remove(PDFViewer);
  123. }
  124. region.AddToRegion(ReadRegionName, PDFViewer);
  125. }
  126. System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
  127. {
  128. NavigationParameters parameters = new NavigationParameters();
  129. parameters.Add(ParameterNames.PDFViewer, PDFViewer);
  130. parameters.Add(ParameterNames.ViewContentViewModel, this);
  131. region.RequestNavigate(ReadModeRegionName, "ReadModeContent", parameters);
  132. }
  133. ));
  134. }
  135. public void PdfViewer_MouseWheelZoomHandler(object sender, bool e)
  136. {
  137. double newZoom = CheckZoomLevel(PDFViewer.ZoomFactor + (e ? 0.01 : -0.01), e);
  138. PDFViewer.Zoom(newZoom);
  139. }
  140. private double CheckZoomLevel(double zoom, bool IsGrowth)
  141. {
  142. double standardZoom = 100;
  143. if (zoom <= 0.01)
  144. {
  145. return 0.01;
  146. }
  147. if (zoom >= 10)
  148. {
  149. return 10;
  150. }
  151. zoom *= 100;
  152. for (int i = 0; i < zoomLevel.Length - 1; i++)
  153. {
  154. if (zoom > zoomLevel[i] && zoom <= zoomLevel[i + 1] && IsGrowth)
  155. {
  156. standardZoom = zoomLevel[i + 1];
  157. break;
  158. }
  159. if (zoom >= zoomLevel[i] && zoom < zoomLevel[i + 1] && !IsGrowth)
  160. {
  161. standardZoom = zoomLevel[i];
  162. break;
  163. }
  164. }
  165. return standardZoom / 100;
  166. }
  167. private void UndoManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  168. {
  169. //不处于页面编辑模式下时,根据PDFVIewer的undo redo状态来更新按钮状态
  170. //页面编辑模式下,按钮状态根据页面编辑的undo redo来显示
  171. if (e.PropertyName == "CanUndo")
  172. {
  173. CanUndo = PDFViewer.UndoManager.CanUndo;
  174. }
  175. if (e.PropertyName == "CanRedo")
  176. {
  177. CanRedo = PDFViewer.UndoManager.CanRedo;
  178. }
  179. if (e.PropertyName == "CanSave")
  180. {
  181. CanSave = PDFViewer.UndoManager.CanSave;
  182. }
  183. }
  184. }
  185. }