ReadViewContentViewModel.cs 7.2 KB

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