MainWindow.xaml.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using compdfkit_tools.PDFControl;
  2. using compdfkit_tools.PDFControlUI;
  3. using ComPDFKitViewer.PdfViewer;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using System.Windows.Controls.Primitives;
  7. namespace viewer_ctrl_demo
  8. {
  9. /// <summary>
  10. /// Interaction logic for MainWindow.xaml
  11. /// </summary>
  12. public partial class MainWindow : Window
  13. {
  14. private CPDFViewer pdfViewer;
  15. public MainWindow()
  16. {
  17. InitializeComponent();
  18. TitleBarControl.Loaded += TitleBarControl_Loaded;
  19. LoadDefaultDocument();
  20. }
  21. private void LoadDocument()
  22. {
  23. pdfViewer.Load();
  24. PDFGrid.Child = pdfViewer;
  25. CPDFScalingControl.InitWithPDFViewer(pdfViewer);
  26. CPDFPageTurningControl.InitWithPDFViewer(pdfViewer);
  27. CPDFViewModeControl.InitWithPDFViewer(pdfViewer);
  28. CPDFDrawModeControl.InitWithPDFViewer(pdfViewer);
  29. UIElement currentBotaTool = GetBotaTool();
  30. if (currentBotaTool is CPDFSearchControl)
  31. {
  32. ((CPDFSearchControl)currentBotaTool).InitWithPDFViewer(pdfViewer);
  33. }
  34. if (currentBotaTool is CPDFThumbnailControl)
  35. {
  36. ((CPDFThumbnailControl)currentBotaTool).InitWithPDFViewer(pdfViewer);
  37. ((CPDFThumbnailControl)currentBotaTool).ThumbLoaded = false;
  38. ((CPDFThumbnailControl)currentBotaTool).LoadThumb();
  39. }
  40. if (currentBotaTool is CPDFBookmarkControl)
  41. {
  42. ((CPDFBookmarkControl)currentBotaTool).InitWithPDFViewer(pdfViewer);
  43. ((CPDFBookmarkControl)currentBotaTool).LoadBookmark();
  44. }
  45. }
  46. private void LoadDefaultDocument()
  47. {
  48. string defaultFilePath = "..\\..\\..\\..\\developer_guide_windows.pdf";
  49. pdfViewer = new CPDFViewer();
  50. pdfViewer.InitDocument(defaultFilePath);
  51. LoadDocument();
  52. }
  53. private void TitleBarControl_Loaded(object sender, RoutedEventArgs e)
  54. {
  55. TitleBarControl.OpenFileEvent += TitleBarControl_OpenFileEvent;
  56. }
  57. private void TitleBarControl_OpenFileEvent(object sender, string filePath)
  58. {
  59. pdfViewer?.CloseDocument();
  60. pdfViewer = new CPDFViewer();
  61. pdfViewer.InitDocument(filePath);
  62. LoadDocument();
  63. }
  64. /// <summary>
  65. /// 搜索工具点击处理
  66. /// </summary>
  67. private void SearchToolButton_Click(object sender, RoutedEventArgs e)
  68. {
  69. UIElement botaTool = GetBotaTool();
  70. if (botaTool == null || !(botaTool is CPDFSearchControl))
  71. {
  72. CPDFSearchControl searchControl = new CPDFSearchControl();
  73. if (pdfViewer != null && pdfViewer.Document != null)
  74. {
  75. searchControl.InitWithPDFViewer(pdfViewer);
  76. }
  77. SetBotaTool(searchControl);
  78. }
  79. ExpandTool(SearchToolButton.IsChecked == true);
  80. ClearToolState(SearchToolButton);
  81. }
  82. /// <summary>
  83. /// 缩略图列表点击处理
  84. /// </summary>
  85. private void ThumbToolButton_Click(object sender, RoutedEventArgs e)
  86. {
  87. UIElement botaTool = GetBotaTool();
  88. if (botaTool == null || !(botaTool is CPDFThumbnailControl))
  89. {
  90. CPDFThumbnailControl thumbControl = new CPDFThumbnailControl();
  91. if (pdfViewer != null && pdfViewer.Document != null)
  92. {
  93. thumbControl.InitWithPDFViewer(pdfViewer);
  94. thumbControl.LoadThumb();
  95. }
  96. SetBotaTool(thumbControl);
  97. }
  98. ExpandTool(ThumbToolButton.IsChecked == true);
  99. ClearToolState(ThumbToolButton);
  100. }
  101. /// <summary>
  102. /// 书签列表点击处理
  103. /// </summary>
  104. private void BookmarkToolButtonn_Click(object sender, RoutedEventArgs e)
  105. {
  106. UIElement botaTool = GetBotaTool();
  107. if (botaTool == null || !(botaTool is CPDFBookmarkControl))
  108. {
  109. CPDFBookmarkControl bookmarkControl = new CPDFBookmarkControl();
  110. if (pdfViewer != null && pdfViewer.Document != null)
  111. {
  112. bookmarkControl.InitWithPDFViewer(pdfViewer);
  113. bookmarkControl.LoadBookmark();
  114. }
  115. SetBotaTool(bookmarkControl);
  116. }
  117. ExpandTool(BookmarkToolButton.IsChecked == true);
  118. ClearToolState(BookmarkToolButton);
  119. }
  120. /// <summary>
  121. /// 大纲列表处理
  122. /// </summary>
  123. private void OutlineToolButton_Click(object sender, RoutedEventArgs e)
  124. {
  125. UIElement botaTool = GetBotaTool();
  126. if (botaTool == null||!(botaTool is CPDFOutlineControl))
  127. {
  128. CPDFOutlineControl outlineControl = new CPDFOutlineControl();
  129. if (pdfViewer != null && pdfViewer.Document != null)
  130. {
  131. outlineControl.InitWithPDFViewer(pdfViewer);
  132. }
  133. SetBotaTool(outlineControl);
  134. }
  135. ExpandTool(OutlineToolButton.IsChecked == true);
  136. ClearToolState(OutlineToolButton);
  137. }
  138. /// <summary>
  139. /// 设置Bota工具内容
  140. /// </summary>
  141. /// <param name="newChild"></param>
  142. private void SetBotaTool(UIElement newChild)
  143. {
  144. BotaToolContainer.Child = newChild;
  145. }
  146. /// <summary>
  147. /// 获取Bota工具
  148. /// </summary>
  149. /// <returns></returns>
  150. private UIElement GetBotaTool()
  151. {
  152. return BotaToolContainer.Child;
  153. }
  154. /// <summary>
  155. /// 展开Bota工具
  156. /// </summary>
  157. /// <param name="isExpand"></param>
  158. private void ExpandTool(bool isExpand)
  159. {
  160. if(isExpand)
  161. {
  162. BodyGrid.ColumnDefinitions[1].Width = new GridLength(300);
  163. }
  164. else
  165. {
  166. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  167. }
  168. BotaToolContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  169. Splitter.Visibility=isExpand ? Visibility.Visible : Visibility.Collapsed;
  170. }
  171. /// <summary>
  172. /// 清除左边工具栏状态
  173. /// </summary>
  174. private void ClearToolState(UIElement ignoreTool)
  175. {
  176. foreach (UIElement child in BotaSideTool.Children)
  177. {
  178. if (child != ignoreTool && child is ToggleButton buttonTool)
  179. {
  180. buttonTool.IsChecked = false;
  181. }
  182. }
  183. }
  184. private void BotaButton_Click(object sender, RoutedEventArgs e)
  185. {
  186. UIElement botaTool = GetBotaTool();
  187. if (botaTool == null)
  188. {
  189. CPDFBOTABarControl pdfBOTABarControl = new CPDFBOTABarControl(BOTATools.Outline|BOTATools.Thumbnail|BOTATools.Search);
  190. if (pdfViewer != null && pdfViewer.Document != null)
  191. {
  192. pdfBOTABarControl.InitWithPDFViewer(pdfViewer);
  193. }
  194. SetBotaTool(pdfBOTABarControl);
  195. }
  196. ExpandTool(BotaButton.IsChecked == true);
  197. ClearToolState(BotaButton);
  198. }
  199. private void ShowPDFInfoDialog()
  200. {
  201. CPDFInfoControl pdfInfoControl = new CPDFInfoControl();
  202. pdfInfoControl.InitWithPDFViewer(pdfViewer);
  203. Window dialog = new Window
  204. {
  205. Title = "PDF Info", // 设置弹出窗口的标题
  206. Content = pdfInfoControl, // 将UserControl添加到弹出窗口中
  207. Width = 600, // 设置弹出窗口的宽度
  208. Height = 300, // 设置弹出窗口的高度
  209. ResizeMode = ResizeMode.NoResize, // 禁止用户调整弹出窗口的大小
  210. WindowStartupLocation = WindowStartupLocation.CenterScreen, // 将弹出窗口显示在屏幕中央
  211. WindowStyle = WindowStyle.ToolWindow, // 设置弹出窗口的样式
  212. Owner = Application.Current.MainWindow // 将主窗口设置为弹出窗口的拥有者
  213. };
  214. dialog.ShowDialog(); // 显示弹出窗口
  215. }
  216. private void PDFInfoButton_Click(object sender, RoutedEventArgs e)
  217. {
  218. ShowPDFInfoDialog();
  219. }
  220. }
  221. }