BottomToolContentViewModel.cs 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. using Prism.Mvvm;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using ComPDFKitViewer.PdfViewer;
  8. using Prism.Commands;
  9. using Prism.Regions;
  10. using System.Windows;
  11. using PDF_Master.Views;
  12. using ComPDFKitViewer;
  13. using System.Windows.Input;
  14. using System.Windows.Controls;
  15. using Prism.Services.Dialogs;
  16. using PDF_Master.CustomControl;
  17. using PDF_Master.Model;
  18. using PDF_Master.ViewModels.BOTA;
  19. using PDF_Master.Views.BOTA;
  20. using PDF_Master.Views.PropertyPanel.AnnotPanel;
  21. using PDF_Master.Views.Tools;
  22. using PDFSettings.Settings;
  23. using PDF_Master.Helper;
  24. using System.IO;
  25. using ImTools;
  26. using PDF_Master.Views.PropertyPanel.ViewModular;
  27. namespace PDF_Master.ViewModels
  28. {
  29. public class BottomToolContentViewModel : BindableBase, INavigationAware
  30. {
  31. #region 文案
  32. private string T_actual;
  33. public string T_Actual
  34. {
  35. get { return T_actual; }
  36. set
  37. {
  38. SetProperty(ref T_actual, value);
  39. }
  40. }
  41. private string T_fitWidth;
  42. public string T_FitWidth
  43. {
  44. get { return T_fitWidth; }
  45. set
  46. {
  47. SetProperty(ref T_fitWidth, value);
  48. }
  49. }
  50. private string T_fitPage;
  51. public string T_FitPage
  52. {
  53. get { return T_fitPage; }
  54. set
  55. {
  56. SetProperty(ref T_fitPage, value);
  57. }
  58. }
  59. private void InitString()
  60. {
  61. T_Actual = App.MainPageLoader.GetString("Zoom_Actual");
  62. T_FitWidth = App.MainPageLoader.GetString("Zoom_FitWidth");
  63. T_FitPage = App.MainPageLoader.GetString("Zoom_FitPage");
  64. }
  65. #endregion 文案
  66. public DelegateCommand Load { get; set; }
  67. public DelegateCommand FirstPageCommand { get; set; }
  68. public DelegateCommand LastPageCommand { get; set; }
  69. public DelegateCommand PrePageCommand { get; set; }
  70. public DelegateCommand NextPageCommand { get; set; }
  71. public DelegateCommand MyPropertyCommand { get; set; }
  72. public DelegateCommand FullScreenCommand { get; set; }
  73. public DelegateCommand ReadModeCommand { get; set; }
  74. public DelegateCommand OpenViewCommand { get; set; }
  75. public DelegateCommand ZoomInCommand { get; set; }
  76. public DelegateCommand ZoomOutCommand { get; set; }
  77. public DelegateCommand SetViewModeCommand { get; set; }
  78. public DelegateCommand OpenFullCommand { get; set; }
  79. public DelegateCommand<object> PageTextKeyDownCommand { get; set; }
  80. public DelegateCommand<object> PageTextPreviewKeyDownCommand { get; set; }
  81. public DelegateCommand<object> SelectionChangedCommand { get; set; }
  82. public DelegateCommand<object> ShowViewModularCommand { get; set; }
  83. public DelegateCommand UpCommand { get; set; }
  84. public DelegateCommand DownCommand { get; set; }
  85. /// <summary>
  86. /// 上一个视图
  87. /// </summary>
  88. public DelegateCommand PreViewCommand { get; set; }
  89. /// <summary>
  90. /// 下一个视图
  91. /// </summary>
  92. public DelegateCommand NextViewCommnad { get; set; }
  93. /// <summary>
  94. /// 拦截键盘输入的事件
  95. /// </summary>
  96. public DelegateCommand<object> PreviewKeyDown { get; set; }
  97. private bool isShowViewModular = false;
  98. /// <summary>
  99. /// 属性栏是否展开
  100. /// </summary>
  101. public bool IsShowViewModular
  102. {
  103. get { return isShowViewModular; }
  104. set
  105. {
  106. SetProperty(ref isShowViewModular, value);
  107. }
  108. }
  109. private bool isSingleView;
  110. public bool IsSingleView
  111. {
  112. get { return isSingleView; }
  113. set
  114. {
  115. SetProperty(ref isSingleView, value);
  116. if (value)
  117. {
  118. SetModeView();
  119. }
  120. }
  121. }
  122. private bool isContinue;
  123. public bool IsContinue
  124. {
  125. get { return isContinue; }
  126. set
  127. {
  128. SetProperty(ref isContinue, value);
  129. SetModeView();
  130. }
  131. }
  132. private bool isDoubleView;
  133. public bool IsDoubleView
  134. {
  135. get { return isDoubleView; }
  136. set
  137. {
  138. SetProperty(ref isDoubleView, value);
  139. if (value)
  140. {
  141. SetModeView();
  142. }
  143. }
  144. }
  145. private bool isBookMode;
  146. public bool IsBookMode
  147. {
  148. get { return isBookMode; }
  149. set
  150. {
  151. SetProperty(ref isBookMode, value);
  152. if (value)
  153. {
  154. SetModeView();
  155. }
  156. }
  157. }
  158. private int pageCount;
  159. public int PageCount
  160. {
  161. get { return pageCount; }
  162. set
  163. {
  164. SetProperty(ref pageCount, value);
  165. }
  166. }
  167. private int currentPage;
  168. public int CurrentPage
  169. {
  170. get { return currentPage; }
  171. set
  172. {
  173. SetProperty(ref currentPage, value);
  174. }
  175. }
  176. private double currenZoom;
  177. public double CurrentZoom
  178. {
  179. get { return currenZoom; }
  180. set { SetProperty(ref currenZoom, value); }
  181. }
  182. private int selectedIndex;
  183. public int SelectedIndex
  184. {
  185. get { return selectedIndex; }
  186. set
  187. {
  188. SetProperty(ref selectedIndex, value);
  189. }
  190. }
  191. private bool rightPanelEnable = true;
  192. public bool RightPanelEnable
  193. {
  194. get { return rightPanelEnable; }
  195. set
  196. {
  197. SetProperty(ref rightPanelEnable, value);
  198. }
  199. }
  200. private bool isPreEnable = false;
  201. /// <summary>
  202. /// 前进是否启用
  203. /// </summary>
  204. public bool IsPreEnable
  205. {
  206. get { return isPreEnable; }
  207. set
  208. {
  209. SetProperty(ref isPreEnable, value);
  210. }
  211. }
  212. private bool isNextEnable = false;
  213. public bool IsNextEnable
  214. {
  215. get { return isNextEnable; }
  216. set
  217. {
  218. SetProperty(ref isNextEnable, value);
  219. }
  220. }
  221. private Stack<int> UndoStack = new Stack<int>();
  222. private Stack<int> RedoStack = new Stack<int>();
  223. public CPDFViewer PDFViewer { get; set; }
  224. public ViewContentViewModel ViewContentViewModel { get; set; }
  225. public OpenFileInfo OpenFileInfo = null;
  226. /// <summary>
  227. /// 来自undo redo方法的跳页 不计入栈
  228. /// </summary>
  229. private bool isFromMethod = false;
  230. /// <summary>
  231. /// 记录上一个页面索引值
  232. /// </summary>
  233. private int oldPageIndex = 0;
  234. /// <summary>
  235. /// 上下滑动的固定值
  236. /// </summary>
  237. private double scrolloffset = 50;
  238. private IRegionManager region;
  239. private IDialogService dialogs;
  240. public BottomToolContentViewModel(IRegionManager regionManager, IDialogService dialogService)
  241. {
  242. region = regionManager;
  243. dialogs = dialogService;
  244. PrePageCommand = new DelegateCommand(GoPrePage, CanPrePageExcute).ObservesProperty(() => CurrentPage);
  245. NextPageCommand = new DelegateCommand(GoNextPage, CanNextPageExcute).ObservesProperty(() => CurrentPage);
  246. FirstPageCommand = new DelegateCommand(GoFirstPage, CanPrePageExcute).ObservesProperty(() => CurrentPage);
  247. LastPageCommand = new DelegateCommand(GoLastPage, CanNextPageExcute).ObservesProperty(() => CurrentPage);
  248. ZoomInCommand = new DelegateCommand(ZoomIn, CanZoomIn).ObservesProperty(() => CurrentZoom);
  249. ZoomOutCommand = new DelegateCommand(ZoomOut, CanZoomOut).ObservesProperty(() => CurrentZoom);
  250. SetViewModeCommand = new DelegateCommand(SetModeView);
  251. PageTextKeyDownCommand = new DelegateCommand<object>(PageNumText_KeyDown);
  252. PageTextPreviewKeyDownCommand = new DelegateCommand<object>(PageNumText_PreviewKeyDown);
  253. SelectionChangedCommand = new DelegateCommand<object>(SelectionChangedEvent);
  254. ShowViewModularCommand = new DelegateCommand<object>(ShowViewModularEvent);
  255. PreviewKeyDown = new DelegateCommand<object>(previewkeydown);
  256. PreViewCommand = new DelegateCommand(undo);
  257. NextViewCommnad = new DelegateCommand(redo);
  258. UpCommand = new DelegateCommand(up);
  259. DownCommand = new DelegateCommand(down);
  260. InitString();
  261. }
  262. /// <summary>
  263. /// 缩放至实际大小
  264. /// </summary>
  265. private void ZoomToRealSize()
  266. {
  267. PDFViewer?.ChangeFitMode(FitMode.FitSize);
  268. if (OpenFileInfo != null)
  269. {
  270. OpenFileInfo.LastFitMode = FitMode.FitSize;
  271. }
  272. }
  273. private void previewkeydown(object e)
  274. {
  275. var args = e as KeyEventArgs;
  276. if (args == null)
  277. {
  278. return;
  279. }
  280. //枚举 过滤所有不合理的输入
  281. if (args.Key != Key.Enter &&args.Key!=Key.Oem5&&args.Key != Key.Back && args.Key != Key.OemComma && args.Key != Key.OemMinus && args.Key != Key.Subtract && !((args.Key >= Key.D0 && args.Key <= Key.D9) || (args.Key >= Key.NumPad0 && args.Key <= Key.NumPad9)))
  282. {
  283. args.Handled = true;
  284. }
  285. if (args.Key == Key.Enter)
  286. {
  287. var text = (args.OriginalSource as TextBox);
  288. int zoom = int.Parse(text.Text.Replace("%",""));
  289. PDFViewer?.Zoom(zoom / 100.0);
  290. }
  291. }
  292. private void up()
  293. {
  294. //连续模式下下滑固定距离
  295. if (((int)PDFViewer.ModeView)%2 == 0)
  296. {
  297. PDFViewer.ScrollToVerticalOffset(PDFViewer.GetVerticalOffset()-scrolloffset);
  298. }
  299. else
  300. {
  301. //非连续模式下翻页
  302. if(CanPrePageExcute())
  303. {
  304. PrePageCommand.Execute();
  305. }
  306. }
  307. }
  308. private void down()
  309. {
  310. //连续模式下下滑固定距离
  311. if (((int)PDFViewer.ModeView) % 2 == 0)
  312. {
  313. PDFViewer.ScrollToVerticalOffset(PDFViewer.GetVerticalOffset()+scrolloffset);
  314. }
  315. else
  316. {
  317. //非连续模式下翻页
  318. if (CanNextPageExcute())
  319. {
  320. NextPageCommand.Execute();
  321. }
  322. }
  323. }
  324. private void undo()
  325. {
  326. if(!IsPreEnable)
  327. {
  328. return;
  329. }
  330. RedoStack.Push(PDFViewer.CurrentIndex);
  331. IsNextEnable = true;
  332. int index = UndoStack.Pop();
  333. PDFViewer.GoToPage(index);
  334. if (UndoStack.Count <= 0)
  335. {
  336. IsPreEnable = false;
  337. }
  338. isFromMethod = true;
  339. }
  340. private void redo()
  341. {
  342. if (!IsNextEnable)
  343. {
  344. return;
  345. }
  346. App.Current.Dispatcher.Invoke(() =>
  347. {
  348. UndoStack.Push(PDFViewer.CurrentIndex);
  349. IsPreEnable = true;
  350. int index = RedoStack.Pop();
  351. PDFViewer.GoToPage(index);
  352. if (RedoStack.Count <= 0)
  353. {
  354. IsNextEnable = false;
  355. }
  356. });
  357. isFromMethod = true;
  358. }
  359. private void ShowViewModularEvent(object obj)
  360. {
  361. if (region.Regions.ContainsRegionWithName(ViewContentViewModel.PropertyRegionName))
  362. {
  363. var check = (bool)obj;
  364. if (check)
  365. {
  366. ViewContentViewModel.IsPropertyOpen = true;
  367. NavigationParameters param = new NavigationParameters();
  368. param.Add(ParameterNames.PDFViewer, PDFViewer);
  369. param.Add(ParameterNames.BottomToolContentViewModel, this);
  370. region.RequestNavigate(RegionNames.PropertyRegionName, "ViewModularContent", param);
  371. }
  372. else
  373. {
  374. ViewContentViewModel.IsPropertyOpen = false;
  375. region.RequestNavigate(RegionNames.PropertyRegionName, "PropertyPanelContent");
  376. }
  377. }
  378. }
  379. private void SelectionChangedEvent(object e)
  380. {
  381. if (e == null)
  382. {
  383. return;
  384. }
  385. var args = e as SelectionChangedEventArgs;
  386. if (args != null)
  387. {
  388. if (SelectedIndex <= 2)
  389. {
  390. switch (SelectedIndex)
  391. {
  392. case 0:
  393. PDFViewer?.ChangeFitMode(FitMode.FitSize);
  394. if (OpenFileInfo != null)
  395. {
  396. OpenFileInfo.LastFitMode = FitMode.FitSize;
  397. }
  398. break;
  399. case 1:
  400. PDFViewer?.ChangeFitMode(FitMode.FitWidth);
  401. if (OpenFileInfo != null)
  402. {
  403. OpenFileInfo.LastFitMode = FitMode.FitWidth;
  404. }
  405. break;
  406. case 2:
  407. PDFViewer?.ChangeFitMode(FitMode.FitHeight);
  408. if (OpenFileInfo != null)
  409. {
  410. OpenFileInfo.LastFitMode = FitMode.FitHeight;
  411. }
  412. break;
  413. default:
  414. break;
  415. }
  416. }
  417. else
  418. {
  419. if (args.AddedItems[0] is ComboBoxItem)
  420. {
  421. if ((args.AddedItems[0] as ComboBoxItem).Tag != null)
  422. {
  423. PDFViewer?.Zoom(Convert.ToDouble((args.AddedItems[0] as ComboBoxItem).Tag.ToString()) / 100.0);
  424. }
  425. }
  426. }
  427. }
  428. }
  429. private void PageNumText_PreviewKeyDown(object e)
  430. {
  431. var args = e as KeyEventArgs;
  432. if (args != null)
  433. {
  434. //显示文本框输入内容
  435. List<Key> NumberKeys = new List<Key>() { Key.D0,Key.D1,Key.D2,Key.D3,Key.D4,Key.D5,Key.D6,Key.D7,Key.D8,Key.D9,Key.NumPad0,Key.NumPad1,Key.NumPad2,
  436. Key.NumPad3,Key.NumPad4,Key.NumPad5,Key.NumPad6,Key.NumPad7,Key.NumPad8,Key.NumPad9,Key.Delete,Key.Back,Key.Enter,Key.Right,Key.Left};
  437. if (!NumberKeys.Contains(args.Key))
  438. {
  439. args.Handled = true;
  440. }
  441. }
  442. }
  443. private void PageNumText_KeyDown(object e)
  444. {
  445. if (!(e is KeyEventArgs))
  446. return;
  447. //回车提交输入
  448. if ((e as KeyEventArgs).Key == System.Windows.Input.Key.Enter)
  449. {
  450. int pagenum = 0;
  451. string text = ((e as KeyEventArgs).OriginalSource as TextBox).Text.ToString();
  452. char[] chs = { ' ', '/', '\\' };//字符截取 拒止非法输入
  453. int i = text.LastIndexOfAny(chs);
  454. if (i > 0)
  455. text = text.Substring(0, i - 1);
  456. if (!int.TryParse(text, out pagenum))
  457. {
  458. CurrentPage = PDFViewer.Document.PageCount;
  459. ((e as KeyEventArgs).OriginalSource as TextBox).Text = PDFViewer.Document.PageCount.ToString();
  460. return;
  461. }
  462. if (pagenum < 1)
  463. pagenum = 1;
  464. else if (pagenum > PDFViewer.Document.PageCount)
  465. pagenum = PDFViewer.Document.PageCount;
  466. PDFViewer.GoToPage(pagenum - 1);
  467. CurrentPage = pagenum;
  468. ((e as KeyEventArgs).OriginalSource as TextBox).Text = pagenum.ToString();
  469. }
  470. }
  471. private void GoPrePage()
  472. {
  473. if (PDFViewer != null)
  474. {
  475. if (PDFViewer.RenderPageStart == PDFViewer.CurrentIndex)
  476. {
  477. PDFViewer.GoToPage(PDFViewer.CurrentIndex - 1);
  478. }
  479. else
  480. {
  481. if ((PDFViewer.RenderPageStart - 1) > 0)
  482. {
  483. PDFViewer.GoToPage(PDFViewer.RenderPageStart - 1);
  484. }
  485. else
  486. {
  487. PDFViewer.GoToPage(PDFViewer.CurrentIndex - 1);
  488. }
  489. }
  490. }
  491. }
  492. private bool CanPrePageExcute()
  493. {
  494. if (PDFViewer != null)
  495. {
  496. if (PDFViewer.CurrentIndex <= 0)
  497. return false;
  498. else
  499. return true;
  500. }
  501. return false;
  502. }
  503. private void GoNextPage()
  504. {
  505. if (PDFViewer != null)
  506. {
  507. PDFViewer.GoToPage(PDFViewer.CurrentIndex + 1);
  508. //双页模式 一次性跳两页
  509. if (((int)PDFViewer.ModeView > 2))
  510. {
  511. PDFViewer.GoToPage(PDFViewer.CurrentIndex + 2);
  512. }
  513. }
  514. }
  515. private bool CanNextPageExcute()
  516. {
  517. if (PDFViewer != null)
  518. {
  519. if (CurrentPage>= PDFViewer.Document.PageCount)
  520. return false;
  521. else
  522. return true;
  523. }
  524. return false;
  525. }
  526. private void GoFirstPage()
  527. {
  528. if (PDFViewer != null)
  529. {
  530. PDFViewer.GoToPage(0);
  531. }
  532. }
  533. private void GoLastPage()
  534. {
  535. if (PDFViewer != null)
  536. {
  537. PDFViewer.GoToPage(PDFViewer.Document.PageCount - 1);
  538. }
  539. }
  540. private void ZoomIn()
  541. {
  542. double zoom = SetPageZoomFactor(true);
  543. PDFViewer.Zoom(zoom / 100);
  544. }
  545. private void ZoomOut()
  546. {
  547. double zoom = SetPageZoomFactor(false);
  548. PDFViewer.Zoom(zoom / 100);
  549. }
  550. private double SetPageZoomFactor(bool flag)
  551. {
  552. double zoom = PDFViewer.ZoomFactor * 100;
  553. if (flag)
  554. {
  555. if (zoom >= 25 && zoom <= 300)
  556. {
  557. zoom = zoom + 25;
  558. }
  559. else if (zoom >= 301 && zoom <= 1000)
  560. {
  561. zoom = zoom + 40;
  562. }
  563. else if (zoom >= 1001 && zoom <= 10000)
  564. {
  565. zoom = zoom + 100;
  566. }
  567. }
  568. else
  569. {
  570. if (zoom >= 25 && zoom <= 300)
  571. {
  572. zoom = zoom - 25;
  573. }
  574. else if (zoom >= 301 && zoom <= 1000)
  575. {
  576. zoom = zoom - 40;
  577. }
  578. else if (zoom >= 1001 && zoom <= 10000)
  579. {
  580. zoom = zoom - 100;
  581. }
  582. }
  583. if (zoom < 25)
  584. {
  585. zoom = 25;
  586. }
  587. if (zoom > 10000)
  588. {
  589. zoom = 10000;
  590. }
  591. return zoom;
  592. }
  593. private bool CanZoomIn()
  594. {
  595. if (PDFViewer != null)
  596. {
  597. if (PDFViewer.ZoomFactor * 100 >= 10000)
  598. return false;
  599. else
  600. return true;
  601. }
  602. return false;
  603. }
  604. private bool CanZoomOut()
  605. {
  606. if (PDFViewer != null)
  607. {
  608. if (PDFViewer.ZoomFactor * 100 <= 25)
  609. return false;
  610. else
  611. return true;
  612. }
  613. return false;
  614. }
  615. public void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
  616. {
  617. if (e.Key == "PageNum")
  618. {
  619. RenderData renderData = e.Value as RenderData;
  620. if (renderData != null)
  621. {
  622. CurrentPage = renderData.PageIndex;
  623. PageCount = PDFViewer.Document.PageCount;
  624. if (!renderData.IsMouseWheel && !isFromMethod)
  625. {
  626. UndoStack.Push(oldPageIndex);
  627. RedoStack.Clear();
  628. IsNextEnable = false;
  629. IsPreEnable = true;
  630. }
  631. isFromMethod = false;
  632. }
  633. oldPageIndex = renderData.PageIndex - 1;
  634. }
  635. if (e.Key == "ViewMode")
  636. {
  637. GetModeView((ViewMode)e.Value);
  638. }
  639. if (e.Key == "Zoom")
  640. {
  641. CurrentZoom = (double)e.Value * 100;
  642. switch (PDFViewer.ModeFit)
  643. {
  644. case FitMode.FitWidth:
  645. SelectedIndex = 1;
  646. break;
  647. case FitMode.FitHeight:
  648. SelectedIndex = 2;
  649. break;
  650. case FitMode.FitSize:
  651. SelectedIndex = 0;
  652. break;
  653. case FitMode.FitFree:
  654. SelectedIndex = -1;
  655. break;
  656. default:
  657. break;
  658. }
  659. }
  660. if (OpenFileInfo != null)
  661. {
  662. if (OpenFileInfo.LastFitMode != PDFViewer.ModeFit)
  663. {
  664. OpenFileInfo.LastFitMode = PDFViewer.ModeFit;
  665. }
  666. if (PDFViewer.ModeFit == FitMode.FitFree)
  667. {
  668. if (OpenFileInfo.LastZoom != PDFViewer.ZoomFactor)
  669. {
  670. OpenFileInfo.LastZoom = PDFViewer.ZoomFactor;
  671. }
  672. }
  673. if (OpenFileInfo.LastPageIndex != PDFViewer.CurrentIndex)
  674. {
  675. OpenFileInfo.LastPageIndex = PDFViewer.CurrentIndex;
  676. }
  677. SettingHelper.SetFileInfo(OpenFileInfo);
  678. }
  679. }
  680. private void ViewContentViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  681. {
  682. if (e.PropertyName == "OCRContentVisible")
  683. {
  684. if (ViewContentViewModel.OCRContentVisible == Visibility.Visible)
  685. {
  686. RightPanelEnable = false;
  687. }
  688. else
  689. {
  690. RightPanelEnable = true;
  691. }
  692. }
  693. if(e.PropertyName== "IsPropertyOpen")
  694. {
  695. //监听的属性面板的变化
  696. IsShowViewModular = ViewContentViewModel.IsPropertyOpen;
  697. }
  698. }
  699. /// <summary>
  700. /// 设置缩放控件的选中项
  701. /// </summary>
  702. private void SetZoomIndex()
  703. {
  704. switch (PDFViewer.ModeFit)
  705. {
  706. case FitMode.FitWidth:
  707. SelectedIndex = 1;
  708. break;
  709. case FitMode.FitHeight:
  710. SelectedIndex = 2;
  711. break;
  712. case FitMode.FitSize:
  713. SelectedIndex = 0;
  714. break;
  715. case FitMode.FitFree:
  716. SelectedIndex = -1;
  717. break;
  718. default:
  719. break;
  720. }
  721. }
  722. private void GetModeView(ViewMode mode)
  723. {
  724. if ((int)mode % 2 == 0)
  725. {
  726. if (!IsContinue)
  727. {
  728. IsContinue = true;
  729. }
  730. }
  731. else
  732. {
  733. if (IsContinue)
  734. {
  735. IsContinue = false;
  736. }
  737. }
  738. if ((int)mode <= 2)
  739. {
  740. if (!isSingleView)
  741. {
  742. IsSingleView = true;
  743. }
  744. }
  745. else if ((int)mode <= 4)
  746. {
  747. if (!isDoubleView)
  748. {
  749. IsDoubleView = true;
  750. }
  751. }
  752. else
  753. {
  754. if (!isBookMode)
  755. {
  756. IsBookMode = true;
  757. }
  758. }
  759. }
  760. public void SetModeView()
  761. {
  762. if (PDFViewer != null)
  763. {
  764. if (IsContinue)
  765. {
  766. if (IsSingleView)
  767. {
  768. PDFViewer.ChangeViewMode(ViewMode.SingleContinuous);
  769. }
  770. else if (IsDoubleView)
  771. {
  772. PDFViewer.ChangeViewMode(ViewMode.DoubleContinuous);
  773. }
  774. else
  775. {
  776. PDFViewer.ChangeViewMode(ViewMode.BookContinuous);
  777. }
  778. }
  779. else
  780. {
  781. if (IsSingleView)
  782. {
  783. PDFViewer.ChangeViewMode(ViewMode.Single);
  784. }
  785. else if (IsDoubleView)
  786. {
  787. PDFViewer.ChangeViewMode(ViewMode.Double);
  788. }
  789. else
  790. {
  791. PDFViewer.ChangeViewMode(ViewMode.Book);
  792. }
  793. }
  794. }
  795. SaveMode(PDFViewer.ModeView);
  796. }
  797. private void SaveMode(object modeView)
  798. {
  799. OpenFileInfo fileInfo = SettingHelper.GetFileInfo(PDFViewer.Document.FilePath);
  800. if (fileInfo != null)
  801. {
  802. if (modeView is SplitMode)
  803. {
  804. fileInfo.LastSplitMode = PDFViewer.Mode;
  805. }
  806. else if (modeView is ViewMode)
  807. {
  808. fileInfo.LastViewMode = PDFViewer.ModeView;
  809. }
  810. else if (modeView is bool)
  811. {
  812. fileInfo.LastPageSpace = (bool)modeView;
  813. }
  814. SettingHelper.SetFileInfo(fileInfo);
  815. }
  816. }
  817. #region Navigation
  818. public void OnNavigatedTo(NavigationContext navigationContext)
  819. {
  820. var viewContentViewModel = navigationContext.Parameters[ParameterNames.ViewContentViewModel] as ViewContentViewModel;
  821. if (viewContentViewModel != null)
  822. {
  823. this.ViewContentViewModel = viewContentViewModel;
  824. IsShowViewModular = viewContentViewModel.IsPropertyOpen;
  825. viewContentViewModel.PropertyChanged -= ViewContentViewModel_PropertyChanged;
  826. viewContentViewModel.PropertyChanged += ViewContentViewModel_PropertyChanged;
  827. }
  828. var pdfview = navigationContext.Parameters[ParameterNames.PDFViewer] as CPDFViewer;
  829. if (pdfview != null)
  830. {
  831. if (ViewContentViewModel.OpenFileInfo != null)
  832. {
  833. OpenFileInfo = ViewContentViewModel.OpenFileInfo;
  834. }
  835. //获取页面设置等信息
  836. PDFViewer = pdfview;
  837. oldPageIndex = pdfview.CurrentIndex;
  838. PageCount = PDFViewer.Document.PageCount;
  839. GetModeView(PDFViewer.ModeView);
  840. //设置下拉框选中项
  841. SetZoomIndex();
  842. if (PageCount > 0)
  843. {
  844. //文档解密后再获取当前页,以此来确保上下翻页按钮的状态的准确的
  845. CurrentPage = PDFViewer.CurrentIndex + 1;
  846. }
  847. CurrentZoom = PDFViewer.ZoomFactor * 100;
  848. PDFViewer.InfoChanged += PDFViewer_InfoChanged;
  849. }
  850. //避免重复注册
  851. if (GlobalCommands.FirstPageCommand.RegisteredCommands.Count < 1)
  852. {
  853. //注册成全局命令
  854. GlobalCommands.FirstPageCommand.RegisterCommand(FirstPageCommand);
  855. GlobalCommands.LastPageCommand.RegisterCommand(LastPageCommand);
  856. GlobalCommands.NextPageCommand.RegisterCommand(NextPageCommand);
  857. GlobalCommands.PrePageCommand.RegisterCommand(PrePageCommand);
  858. GlobalCommands.PreViewCommand.RegisterCommand(PreViewCommand);
  859. GlobalCommands.NextViewCommand.RegisterCommand(NextViewCommnad);
  860. GlobalCommands.UpCommand.RegisterCommand(UpCommand);
  861. GlobalCommands.DownCommand.RegisterCommand(DownCommand);
  862. GlobalCommands.SinglePageCommand.RegisterCommand(new DelegateCommand(() => { IsSingleView = true; }));
  863. GlobalCommands.DoublePageCommand.RegisterCommand(new DelegateCommand(() => { IsDoubleView = true; }));
  864. GlobalCommands.ZoomInCommand.RegisterCommand(ZoomInCommand);
  865. GlobalCommands.ZoomOutPageCommand.RegisterCommand(ZoomOutCommand);
  866. GlobalCommands.RealSizeCommand.RegisterCommand(new DelegateCommand(() => { ZoomToRealSize(); }));
  867. }
  868. }
  869. public bool IsNavigationTarget(NavigationContext navigationContext)
  870. {
  871. return true;
  872. }
  873. public void OnNavigatedFrom(NavigationContext navigationContext)
  874. {
  875. IsShowViewModular = ViewContentViewModel.IsPropertyOpen;
  876. }
  877. #endregion Navigation
  878. }
  879. }