using Microsoft.Win32; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ComPDFKitViewer.PdfViewer; using Prism.Regions; using DryIoc; using System.Diagnostics; using Prism.Services.Dialogs; using PDF_Office.CustomControl; using PDF_Office.Model; using System.Windows; using System.Windows.Controls; namespace PDF_Office.ViewModels { public class ViewContentViewModel : BindableBase, INavigationAware { private CPDFViewer PDFViewer { get; set; } private MainContentViewModel mainViewModel { get; set; } public IRegionManager region; public IDialogService dialogs; public string ViwerRegionName { get; set; } public string BOTARegionName { get; set; } public string PropertyRegionName { get; set; } public string ToolContentRegionName { get; set; } public DelegateCommand LoadFile { get; set; } public DelegateCommand Load { get; set; } public DelegateCommand TabControlSelectionChangedCommand { get; set; } private int gridToolRow = 1; /// /// 控制ToolContent的Row /// public int GridToolRow { get { return gridToolRow; } set { SetProperty(ref gridToolRow, value); } } private int gridToolRowSpan = 3; /// /// 控制ToolContent的RowSpan /// public int GridToolRowSpan { get { return gridToolRowSpan; } set { SetProperty(ref gridToolRowSpan, value); } } private Visibility toolContentVisible = Visibility.Visible; /// /// 控制Content的显示 /// 留意:显示前需要先注入内容、设置好行和跨行数 /// public Visibility ToolContentVisible { get { return toolContentVisible; } set { SetProperty(ref toolContentVisible, value); } } private bool isOpenFile = false; /// /// 鼠标滚轮缩放的缩放值 /// private double[] zoomLevel = { 1.00f, 10, 25, 50, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 }; public ViewContentViewModel(IRegionManager regionManager,IDialogService dialogService) { region = regionManager; dialogs = dialogService; LoadFile = new DelegateCommand(loadFile); Load = new DelegateCommand(LoadControl); TabControlSelectionChangedCommand = new DelegateCommand(TabControlSelectonChangedEvent); ViwerRegionName = Guid.NewGuid().ToString(); BOTARegionName = Guid.NewGuid().ToString(); PropertyRegionName = Guid.NewGuid().ToString(); ToolContentVisible = Visibility.Visible; ToolContentRegionName = Guid.NewGuid().ToString(); ToolContentVisible = Visibility.Collapsed; } private void LoadControl() { //在构造函数中使用Region需要借助Dispatcher 确保UI已经加载完成,加载BOTA区域 System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => { region.RequestNavigate(BOTARegionName, "BOTAContent"); } )); } /// /// 将PDFViwer添加到Region /// private void loadFile() { PDFViewer.MouseWheelZoomHandler += PdfViewer_MouseWheelZoomHandler; region.AddToRegion(ViwerRegionName, PDFViewer); } private void TabControlSelectonChangedEvent(object e) { var args = e as SelectionChangedEventArgs; if(args!=null) { var item = args.AddedItems[0] as TabItem; if(item.Name=="TabItemPageEdit") { EnterPageEdit(); } else { ExitPageEdit(); } } } #region PDFViewer鼠标滚轮缩放事件 public void PdfViewer_MouseWheelZoomHandler(object sender, bool e) { double newZoom = CheckZoomLevel(PDFViewer.ZoomFactor + (e ? 0.01 : -0.01), e); PDFViewer.Zoom(newZoom); } private double CheckZoomLevel(double zoom, bool IsGrowth) { double standardZoom = 100; if (zoom <= 0.01) { return 0.01; } if (zoom >= 10) { return 10; } zoom *= 100; for (int i = 0; i < zoomLevel.Length - 1; i++) { if (zoom > zoomLevel[i] && zoom <= zoomLevel[i + 1] && IsGrowth) { standardZoom = zoomLevel[i + 1]; break; } if (zoom >= zoomLevel[i] && zoom < zoomLevel[i + 1] && !IsGrowth) { standardZoom = zoomLevel[i]; break; } } return standardZoom / 100; } #endregion #region Navigate public void OnNavigatedTo(NavigationContext navigationContext) { if (isOpenFile) return; var mainVM = navigationContext.Parameters[ParameterNames.MainViewModel] as MainContentViewModel; if (mainVM != null) { mainViewModel = mainVM; } var pdfview = navigationContext.Parameters[ParameterNames.PDFViewer] as CPDFViewer; if (pdfview!=null) { PDFViewer = pdfview; loadFile(); } isOpenFile = true; } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } #endregion /// /// 显示前添加内容到Region /// /// private void ShowToolContent(bool isPageEdit = true) { //显示页面编辑 if(isPageEdit) { if(GridToolRow!=1) { GridToolRow = 1; } if(GridToolRowSpan!=3) { GridToolRowSpan = 3; } } else { //显示其他工具模式 如密文、水印等 GridToolRow = 0; GridToolRowSpan = 4; } ToolContentVisible = Visibility.Visible; } /// /// 进入页面编辑模式 /// private void EnterPageEdit() { NavigationParameters param = new NavigationParameters(); param.Add(ParameterNames.PDFViewer, PDFViewer); param.Add(ParameterNames.ViewContentViewModel,this); region.RequestNavigate(ToolContentRegionName, "PageEditContent" , param); ShowToolContent(); } /// /// 退出页面编辑模式,隐藏ToolContent /// public void ExitPageEdit() { ToolContentVisible = Visibility.Collapsed; } } }