using ComPDFKitViewer; using ComPDFKitViewer.AnnotEvent; using ComPDFKitViewer.PdfViewer; using PDF_Office.Helper; using PDF_Office.Model; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace PDF_Office.ViewModels.Form { public class FormsToolContentViewModel : BindableBase, INavigationAware { #region 属性 /// /// 显示PreView按钮 /// public Visibility ShowPreView { get { return showPreView; } set { SetProperty(ref showPreView, value); } } #endregion #region 变量 private CPDFViewer PDFViewer; public ViewContentViewModel viewContentViewModel; private IRegionManager regions; private string CurrentToolBtnType; /// /// 按钮和属性面板键值对 /// private Dictionary btnToProperty = new Dictionary(); private Visibility showPreView; #endregion #region Command变量 public DelegateCommand CheckedCommand { get; set; } public DelegateCommand CancleCheckedCommand { get; set; } public DelegateCommand ClickCommand { get; set; } public event EventHandler UncheckedToolsBtnEvent; #endregion #region 初始化 public FormsToolContentViewModel(IRegionManager regionManager) { regions = regionManager; CheckedCommand = new DelegateCommand(CheckedEvent); CancleCheckedCommand = new DelegateCommand(CancleChecked); ClickCommand = new DelegateCommand(ClickEvent); InitBtnToProperty(); } private void InitBtnToProperty() { btnToProperty.Add("EmptyForm", "EmptyFormProperty"); btnToProperty.Add("Text", "TextFieldProperty"); btnToProperty.Add("CheckBox", "CheckBoxProperty"); btnToProperty.Add("RadioButton", "RadioButtonProperty"); btnToProperty.Add("ListBox", "ListBoxProperty"); btnToProperty.Add("Combox", "ComboxProperty"); btnToProperty.Add("Button", "ButtonProperty"); btnToProperty.Add("Sign", "SignProperty"); } #endregion #region 属性面板 /// /// Form /// /// private void CheckedEvent(string type) { AddToPropertyPanel(type); } private void ClickEvent(string obj) { if (string.IsNullOrEmpty(obj) == false) { if (CurrentToolBtnType == obj) { PDFViewer.SetMouseMode(MouseModes.FormEditTool); PDFViewer.SetToolParam(new AnnotHandlerEventArgs()); UncheckedToolsBtnEvent?.Invoke(null, CurrentToolBtnType); CurrentToolBtnType = ""; } else { CurrentToolBtnType = obj; } } } private void AddToPropertyPanel(string type, WidgetArgs widget = null, UpdateAttributeHelper e = null) { if (btnToProperty.ContainsKey(type)) { NavigationParameters parameters = new NavigationParameters(); parameters.Add(ParameterNames.PDFViewer, PDFViewer); parameters.Add("WidgetArgs", widget); parameters.Add(ParameterNames.AnnotEvent, e); System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => { //if (toolregion.Regions.ContainsRegionWithName(MainContentRegionName)) regions.RequestNavigate(RegionNames.PropertyRegionName, btnToProperty[type], parameters); })); ShowPropertyPanel(true); } } private void ShowPropertyPanel(bool show = true) { viewContentViewModel.IsPropertyOpen = show; } #endregion #region 工具按钮 private void CancleChecked() { PDFViewer.SetMouseMode(MouseModes.FormEditTool); PDFViewer.SetToolParam(new AnnotHandlerEventArgs()); } #endregion #region 表单内部触发的事件(比如选中表单行为等) private void PDFViewer_WidgetClickHander(object sender, WidgetArgs e) { //点击表单,签名表单,触发事件 if (e != null) { } } // 选中时 private void PDFViewer_AnnotActiveHandler(object sender, AnnotAttribEvent e) { if (e != null) { var annotHandlerEventArgs = e.AnnotItemsList[0]; if (annotHandlerEventArgs as WidgetArgs != null) { var widgetArgs = annotHandlerEventArgs as WidgetArgs; //新建的表单之后; if (CurrentWidgetArgs != null && CurrentWidgetArgs.AnnotIndex == widgetArgs.AnnotIndex && CurrentWidgetArgs.PageIndex == widgetArgs.PageIndex) { GetSelectWidget(widgetArgs, e); return; } CurrentWidgetArgs = widgetArgs; GetSelectWidget(widgetArgs, e); UncheckedToolsBtnEvent?.Invoke(null, CurrentToolBtnType); CurrentToolBtnType = ""; } } } public WidgetArgs CurrentWidgetArgs; //新增 private void PDFViewer_AnnotEditHandler(object sender, List e) { if(e != null && e.Count > 0) { var widgeArgs = e[e.Count - 1].EditAnnotArgs as WidgetArgs; if (widgeArgs != null) { CurrentWidgetArgs = widgeArgs; } AnnotEditEvent editEvent = e[e.Count - 1]; //新增表单后,选中 if (editEvent.EditAction == ActionType.Add) { PDFViewer.SelectAnnotation(editEvent.PageIndex, editEvent.AnnotIndex); } } } //获取View选中的表单 private void GetSelectWidget(WidgetArgs widgetArgs, AnnotAttribEvent e) { if (widgetArgs == null) return; switch (widgetArgs.WidgeType) { case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_TEXTFIELD: AddToPropertyPanel("Text", widgetArgs, new UpdateAttributeHelper(e)); break; case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_CHECKBOX: AddToPropertyPanel("CheckBox", widgetArgs, new UpdateAttributeHelper(e)); break; case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_RADIOBUTTON: AddToPropertyPanel("RadioButton", widgetArgs, new UpdateAttributeHelper(e)); break; case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_LISTBOX: AddToPropertyPanel("ListBox", widgetArgs, new UpdateAttributeHelper(e)); break; case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_COMBOBOX: AddToPropertyPanel("Combox", widgetArgs, new UpdateAttributeHelper(e)); break; case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_PUSHBUTTON: AddToPropertyPanel("Button", widgetArgs, new UpdateAttributeHelper(e)); break; case ComPDFKit.PDFAnnotation.Form.C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS: AddToPropertyPanel("Sign", widgetArgs, new UpdateAttributeHelper(e)); break; } } #endregion #region Navegation public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { UncheckedToolsBtnEvent?.Invoke(null, CurrentToolBtnType); CurrentToolBtnType = ""; } public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.ViewContentViewModel,out viewContentViewModel); navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); BindingFormHandler(); } private void BindingFormHandler() { if (PDFViewer != null) { PDFViewer.WidgetClickHander -= PDFViewer_WidgetClickHander; PDFViewer.WidgetClickHander += PDFViewer_WidgetClickHander; PDFViewer.AnnotActiveHandler -= PDFViewer_AnnotActiveHandler; PDFViewer.AnnotActiveHandler += PDFViewer_AnnotActiveHandler; PDFViewer.AnnotEditHandler -= PDFViewer_AnnotEditHandler; PDFViewer.AnnotEditHandler += PDFViewer_AnnotEditHandler; } } #endregion } }