using ComPDFKit.PDFAnnotation; using ComPDFKit.PDFAnnotation.Form; using ComPDFKitViewer; using ComPDFKitViewer.AnnotEvent; using ComPDFKitViewer.PdfViewer; using PDF_Master.Helper; using PDF_Master.Model; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace PDF_Master.ViewModels.Form { public class CheckBoxPropertyViewModel : FormBaseVM, INavigationAware { #region Command public DelegateCommand FieldNameTextChangedCommand { get; set; } public DelegateCommand ToolTipTextChangedCommand { get; set; } //外观 public DelegateCommand ResetColorCommand { get; set; } public DelegateCommand ResetColorCheckedBtnCommand { get; set; } public DelegateCommand ExportedValuesTextChangedCommand { get; set; } public DelegateCommand LineStyleCommand { get; set; } #endregion #region 变量 private CPDFViewer PDFViewer; private WidgetCheckBoxArgs checkBoxArgs; private IDialogService dialogs; public event EventHandler SelectResetColorBtnHandler; #endregion #region 初始化 public CheckBoxPropertyViewModel(IDialogService dialogService) { dialogs = dialogService; InitVariable(); InitCommand(); } private void InitVariable() { InitAllResetColor(); } private void InitAllResetColor() { ResetColorOne = InitResetColor(Color.FromArgb(0xFF, 0x00, 0x00, 0x00), Color.FromArgb(0xFF, 0x00, 0x00, 0x00), Colors.Transparent); ResetColorTwo = InitResetColor(Color.FromArgb(0xFF, 0x00, 0x00, 0x00), Color.FromArgb(0xFF, 0x00, 0x00, 0x00), Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF)); ResetColorThree = InitResetColor(Color.FromArgb(0xFF, 0x00, 0x00, 0x00), Color.FromArgb(0xFF, 0xFF, 0x00, 0x00), Colors.Transparent); ResetColorForth = InitResetColor(Color.FromArgb(0xFF, 0x00, 0x00, 0x00), Color.FromArgb(0xFF, 0xff, 0x00, 0x00), Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF)); } private void InitCommand() { //一般 FieldNameTextChangedCommand = new DelegateCommand(FieldNameTextChanged); ToolTipTextChangedCommand = new DelegateCommand(ToolTipTextChanged); //外观 ResetColorCheckedBtnCommand = new DelegateCommand(ResetColorCheckedBtn); ResetColorCommand = new DelegateCommand(ResetColorEvent); LineStyleCommand = new DelegateCommand(LineStyleBtnEvent); //选项 ExportedValuesTextChangedCommand = new DelegateCommand(ExportedValuesTextChanged); } #endregion #region 事件 private void FieldNameTextChanged(string obj) { if (string.IsNullOrEmpty(obj) == false && IsCurrentWidget == true) { FieldName = obj; } } private void ToolTipTextChanged(string obj) { if (string.IsNullOrEmpty(obj) == false && IsCurrentWidget == true) { ToolTipStr = obj; } } private void LineStyleBtnEvent(object obj) { if (obj != null) { switch ((string)obj) { case "Solid": BorderStyle = ComPDFKit.PDFAnnotation.C_BORDER_STYLE.BS_SOLID; break; case "Dotted": BorderStyle = ComPDFKit.PDFAnnotation.C_BORDER_STYLE.BS_DASHDED; break; } } } private void ExportedValuesTextChanged(string obj) { if (obj != null && IsCurrentWidget == true) { ExportedValues = obj; } } private void ResetColorCheckedBtn(object obj) { if (obj != null) { var str = obj as string; if (str != null) { switch (str) { case "One": BorderColor = ResetColorOne.BorderColor.Color; ContentColor = ResetColorOne.FontColor.Color; FillColor = ResetColorOne.FillColor.Color; break; case "Two": BorderColor = ResetColorTwo.BorderColor.Color; ContentColor = ResetColorTwo.FontColor.Color; FillColor = ResetColorTwo.FillColor.Color; break; case "Three": BorderColor = ResetColorThree.BorderColor.Color; ContentColor = ResetColorThree.FontColor.Color; FillColor = ResetColorThree.FillColor.Color; break; case "Forth": BorderColor = ResetColorForth.BorderColor.Color; ContentColor = ResetColorForth.FontColor.Color; FillColor = ResetColorForth.FillColor.Color; break; } } } } private void ResetColorEvent(object obj) { bool result = true; DialogParameters value = new DialogParameters(); value.Add(ParameterNames.PDFViewer, PDFViewer); dialogs.ShowDialog(DialogNames.EditPresetColorsDialog, value, e => { if (e.Result != ButtonResult.OK) { result = false; } EditPresetColorsDialogViewModel DialogVM = e.Parameters.GetValue(ParameterNames.DataModel); if (DialogVM != null) { } }); if (!result) { return; } } #endregion #region 外部XAML触发事件 private void UpdataSelectResetColorBtn() { int result = 0; if (UpdataSelectResetColor(ResetColorOne)) { result = 1; } else if (UpdataSelectResetColor(ResetColorTwo)) { result = 2; } else if (UpdataSelectResetColor(ResetColorThree)) { result = 3; } else if (UpdataSelectResetColor(ResetColorForth)) { result = 4; } SelectResetColorBtnHandler?.Invoke(null, result); } private bool UpdataSelectResetColor(ResetColor reset) { if (reset.FillColor.Color == FillColor && reset.FontColor.Color == ContentColor && reset.BorderColor.Color == BorderColor ) { return true; } return false; } #endregion #region Navegation public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { checkBoxArgs = null; isCreateWidget = false; IsCurrentWidget = false; PDFViewer.AnnotEditHandler -= PDFViewer_AnnotEditHandler; } public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); navigationContext.Parameters.TryGetValue(ParameterNames.AnnotEvent, out AttribEvent); navigationContext.Parameters.TryGetValue("WidgetArgs", out checkBoxArgs); PDFViewer.AnnotEditHandler -= PDFViewer_AnnotEditHandler; PDFViewer.AnnotEditHandler += PDFViewer_AnnotEditHandler; GetWidgeText(); UpdataSelectResetColorBtn(); } 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) { AnnotEditEvent editEvent = e[e.Count - 1]; if (editEvent.EditAction == ActionType.Modify) { SetSizeNoUpdateValue(widgeArgs.Width, widgeArgs.Height); } } } } private void GetWidgeText() { if (checkBoxArgs == null) { PDFViewer.SetMouseMode(MouseModes.FormEditTool); checkBoxArgs = new WidgetCheckBoxArgs(); WidgetCheckBoxArgs args = new WidgetCheckBoxArgs(); args.CheckStyle = C_CHECK_STYLE.CK_CHECK; args.BorderStyle = C_BORDER_STYLE.BS_SOLID; args.LineColor = Colors.Black; args.BgColor = Colors.LightGreen; args.LineWidth = 2; args.Height = 18; args.Width = 18; args.ExportValue = "Yes"; checkBoxArgs = args; PDFViewer.SetToolParam(checkBoxArgs); isCreateWidget = true; } else { PDFViewer.SetToolParam(new AnnotHandlerEventArgs()); isCreateWidget = false; } GetProperty(); IsCurrentWidget = true; } private void GetProperty() { if (checkBoxArgs != null) { IsLocked = checkBoxArgs.Locked; FieldName = checkBoxArgs.FieldName; ToolTipStr = checkBoxArgs.Tooltip; IsReadOnly = checkBoxArgs.ReadOnly; IsRequiredField = checkBoxArgs.IsRequired; FillColor = checkBoxArgs.BgColor; ContentColor = checkBoxArgs.FontColor; BorderColor = checkBoxArgs.LineColor; BorderThiness = checkBoxArgs.LineWidth; BorderStyle = checkBoxArgs.BorderStyle; ExportedValues = checkBoxArgs.ExportValue; //避免BorderStyle跟上一个值相同,而没触发更改IsSolid属性 if (BorderStyle == C_BORDER_STYLE.BS_SOLID) IsSolid = true; else IsSolid = false; IsDefaultCheckBox = checkBoxArgs.IsChecked; if (isCreateWidget == false) { HeightSize = checkBoxArgs.Height; WidthSize = checkBoxArgs.Width; } } } #endregion } }