using ComPDFKit.PDFDocument; using ComPDFKitViewer.PdfViewer; using ImTools; using Microsoft.Office.Interop.Word; using PDF_Office.CustomControl; using PDF_Office.Helper; using PDF_Office.Model; using PDF_Office.Model.PageEdit; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using static Dropbox.Api.TeamLog.AdminAlertSeverityEnum; using static System.Net.Mime.MediaTypeNames; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using ListViewItem = System.Windows.Controls.ListViewItem; using TextBox = System.Windows.Controls.TextBox; namespace PDF_Office.ViewModels.BOTA { public class BookmarkContentViewModel : BindableBase, INavigationAware { #region 属性 private static string hoverColor = "#D9D9D9"; private static string defaultColor = "#F2F2F2"; private static string selectColcr = "#97D7FB"; private static string borderBackground = "#FFFFFF"; private static string borderBrush = "#000000"; private bool isSelete = false; private IRegionManager region; private IDialogService dialogs; public CPDFViewer PDFViewer; private ObservableCollection bookmarklist; public ObservableCollection Bookmarklist { get { return bookmarklist; } set { SetProperty(ref bookmarklist, value); } } private Visibility isEmpty; public Visibility IsEmptyPanelVisibility { get { return isEmpty; } set { SetProperty(ref isEmpty, value); } } #endregion 属性 #region 命令 public DelegateCommand MouseClickCommand { get; set; } public DelegateCommand MouseEnterCommand { get; set; } public DelegateCommand MouseLeaveCommand { get; set; } public DelegateCommand LostFocusCommand { get; set; } public DelegateCommand GotFocusCommand { get; set; } public DelegateCommand AddBookmarkCommand { get; set; } public DelegateCommand ListViewItemMouseDownCommand { get; set; } public DelegateCommand RenameCommand { get; set; } public DelegateCommand EditPageIndexCommand { get; set; } public DelegateCommand DeleteCommand { get; set; } #endregion 命令 public BookmarkContentViewModel(IRegionManager regionManager, IDialogService dialogService) { region = regionManager; dialogs = dialogService; MouseClickCommand = new DelegateCommand(MouseClickEvent); MouseEnterCommand = new DelegateCommand(MouseEnterEvent); LostFocusCommand = new DelegateCommand(LostFocusEvent); MouseLeaveCommand = new DelegateCommand(MouseLeaveEvent); GotFocusCommand = new DelegateCommand(GotFocusEvent); AddBookmarkCommand = new DelegateCommand(AddBookmarkEvent); ListViewItemMouseDownCommand = new DelegateCommand(ListViewItemMouseLeftButtonDownEvent); RenameCommand = new DelegateCommand(RenameEvent); DeleteCommand = new DelegateCommand(DelegateEvent); EditPageIndexCommand = new DelegateCommand(EditPageIndexEvent); } private void EditPageIndexEvent(object obj) { throw new NotImplementedException(); } private void DelegateEvent(object obj) { } private void RenameEvent(object obj) { CPDFBookmark bookmark = obj as CPDFBookmark; if (bookmark != null) { //ListBoxItem myListBoxItem = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem(myListBox.Items.CurrentItem)); } } private void GotFocusEvent(object obj) { if (obj is CompositeCommandParameter) { CompositeCommandParameter parameter = (CompositeCommandParameter)obj; if (parameter.Parameter is TextBox) { TextBox textBox = (TextBox)parameter.Parameter; textBox.SelectAll(); textBox.PreviewMouseDown -= new MouseButtonEventHandler(TxtTitleInput_PreviewMouseLeftButtonDown); } } } private void LostFocusEvent(object obj) { if (obj is CompositeCommandParameter) { CompositeCommandParameter parameter = (CompositeCommandParameter)obj; if (parameter.Parameter is TextBox) { TextBox textBox = (TextBox)parameter.Parameter; //textBox.PreviewMouseDown += new MouseButtonEventHandler(TxtTitleInput_PreviewMouseLeftButtonDown); var item = CommonHelper.FindVisualParent(textBox); if (item != null) { var data = item.DataContext as CPDFBookmark; if (data == null) return; var result = PDFViewer.Document.EditBookmark(data.PageIndex, textBox.Text.Trim()); if (result) { data.Title = textBox.Text.Trim(); PDFViewer.UndoManager.CanSave = true; } } } } } private void TxtTitleInput_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { TextBox textBox = sender as TextBox; textBox.Focus(); e.Handled = true; } private void ListViewItemMouseLeftButtonDownEvent(object obj) { object[] objs = obj as object[]; if (objs != null && objs.Length > 0) { if (objs[1] is MouseButtonEventArgs) { var mouse = (MouseButtonEventArgs)objs[1]; if (mouse.LeftButton == MouseButtonState.Pressed) { TextBlock box = null; StackPanel stackPanel = null; ListBoxItem listBoxItem = (objs[0] as ListBoxItem); if (mouse.ClickCount >= 2) { if (mouse.OriginalSource is TextBlock) { box = (TextBlock)mouse.OriginalSource; stackPanel = (box.Parent as Grid).Parent as StackPanel; if (box != null) { listBoxItem.IsSelected = true; listBoxItem.Focus(); box.Visibility = Visibility.Collapsed; TextBox textBox = CommonHelper.FindVisualChild(stackPanel); textBox.Dispatcher.BeginInvoke(new Action(() => { textBox.Focus(); textBox.SelectAll(); })); //textBox.PreviewMouseDown += new MouseButtonEventHandler(TxtTitleInput_PreviewMouseLeftButtonDown); //TxtTitleInput_PreviewMouseLeftButtonDown(textBox, mouse); isSelete = true; } } } if (mouse.ClickCount == 1) { if (listBoxItem != null) { box = CommonHelper.FindVisualChild(listBoxItem); //box.Background = listBoxItem.Background; //box.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(selectColcr)); int index = (listBoxItem.DataContext as CPDFBookmark).PageIndex; PDFViewer.GoToPage(index); isSelete = false; } } //MessageBox.Show("dsafa"); } } } } private void MouseLeaveEvent(object obj) { if (obj is CompositeCommandParameter) { CompositeCommandParameter parameter = (CompositeCommandParameter)obj; if (parameter.Parameter is Grid) { Grid grid = parameter.Parameter as Grid; if (grid != null) { TextBlock box = CommonHelper.FindVisualChild(grid); ListBoxItem myListBoxItem = CommonHelper.FindVisualParent(grid); box.Visibility = Visibility.Visible; //if (myListBoxItem.IsSelected == true) //{ // box.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(defaultColor)); //} //if (myListBoxItem.IsMouseOver == true) //{ // box.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(defaultColor)); //} //else //{ // box.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(defaultColor)); //} //myListBoxItem.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(defaultColor)); //grid.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(defaultColor)); } } } } public void MouseEnterEvent(object obj) { if (obj is CompositeCommandParameter) { CompositeCommandParameter parameter = (CompositeCommandParameter)obj; if (parameter.Parameter is Grid) { Grid grid = parameter.Parameter as Grid; if (grid != null) { TextBlock box = CommonHelper.FindVisualChild(grid); ListBoxItem listBoxItem = CommonHelper.FindVisualParent(grid); if (box != null) { box.Visibility = Visibility.Visible; //box.Background = listBoxItem.Background; //box.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(hoverColor)); } //myListBoxItem.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(hoverColor)); //grid.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(hoverColor)); } } } } private void AddBookmarkEvent(object obj) { int index = PDFViewer.CurrentIndex; string mark = string.Format($"第{index + 1}页"); var list = PDFViewer.Document.GetBookmarkList().FindAll(q => q.PageIndex == index); if (list.Count > 0) { System.Windows.Controls.ListView listView = obj as System.Windows.Controls.ListView; if (listView != null) { //listView.Items.CurrentItem = list[0]; ListBoxItem myListBoxItem = (ListBoxItem)(listView.ItemContainerGenerator.ContainerFromItem(list[0])); //ContentPresenter myContentPresenter = CommonHelper.FindVisualChild(myListBoxItem); //DataTemplate myDataTemplate = myContentPresenter.ContentTemplate; //Grid item = (Grid)myDataTemplate.FindName("Grid", myContentPresenter); //Grid grid = CommonHelper.FindVisualChild(myListBoxItem); myListBoxItem.IsSelected = true; myListBoxItem.Focus(); //listView.SelectedItem = myListBoxItem; //myListBoxItem.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(selectColcr)); return; } } DialogParameters value = new DialogParameters(); value.Add(ParameterNames.Bookmark, mark); value.Add(ParameterNames.Title, "创建一个新的书签"); dialogs.ShowDialog(DialogNames.AddBookmarkDialog, value, e => { if (e.Result == ButtonResult.OK && e.Parameters != null) { if (e.Parameters.ContainsKey(ParameterNames.Bookmark)) { mark = e.Parameters.GetValue(ParameterNames.Bookmark).ToString(); CPDFBookmark bookmark = new CPDFBookmark(); bookmark.Title = mark; bookmark.Date = DateTime.Now.ToString(@"yyyyMMddHHmmsszzz\'").Replace(':', '\'') + "\n"; bookmark.PageIndex = PDFViewer.CurrentIndex; if (PDFViewer.Document.AddBookmark(bookmark)) { PDFViewer.UndoManager.CanSave = true; Bookmarklist = new ObservableCollection(PDFViewer.Document.GetBookmarkList().OrderBy(d => d.Title)); } } } }); } public void MouseClickEvent(object obj) { if (obj is MouseButtonEventArgs) { var mouse = (MouseButtonEventArgs)obj; if (mouse.LeftButton == MouseButtonState.Pressed) { TextBlock box = null; Grid grid = null; if (mouse.ClickCount >= 2) { if (mouse.Source is Grid) { grid = mouse.Source as Grid; //grid.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(selectColcr)); if (grid != null) { box = CommonHelper.FindVisualChild(grid); //grid.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(selectColcr)); if (box != null) { box.Visibility = Visibility.Collapsed; //TextBox textBox = CommonHelper.FindVisualChild((box.Parent as StackPanel)); //FocusManager.SetFocusedElement(box.Parent, textBox); //Keyboard.Focus(textBox); //textBox.IsHitTestVisible = true; //textBox.Focus(); } } } if (mouse.Source is TextBlock) { box = (TextBlock)mouse.Source; grid = (box.Parent as StackPanel).Parent as Grid; //grid.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(selectColcr)); if (box != null) { box.Visibility = Visibility.Collapsed; //TextBox textBox = CommonHelper.FindVisualChild((box.Parent as StackPanel)); //FocusManager.SetFocusedElement(box.Parent, textBox); //Keyboard.Focus(textBox); //textBox.IsHitTestVisible = true; //textBox.Focus(); } } } //MessageBox.Show("dsafa"); } } } public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); if (PDFViewer == null) { return; } Bookmarklist = new ObservableCollection(PDFViewer.Document.GetBookmarkList().OrderBy(d => d.Title)); if (Bookmarklist.Count < 1) { IsEmptyPanelVisibility = Visibility.Visible; return; } else { IsEmptyPanelVisibility = Visibility.Hidden; return; } } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } } }