ZhouJieSheng 2 лет назад
Родитель
Сommit
3d8b33cf49

+ 38 - 0
PDF Office/EventAggregators/PageEditNotifyEvent.cs

@@ -17,9 +17,47 @@ namespace PDF_Office.EventAggregators
 
     public class PageEditNotifyEventArgs
     {
+
+        public PageEditNotifyEventArgs(string unicode)
+        {
+            Unicode = unicode;
+            //默认为刷新页面
+            Type = NotifyType.RefreshPage;
+        }
+
+        public PageEditNotifyEventArgs(string unicode,NotifyType type,List<int> pages)
+        {
+            Unicode = unicode;
+            Type = type;
+            PageRange = pages;
+        }
         /// <summary>
         /// 避免触发其他页签的识别码
         /// </summary>
         public string Unicode { get; set; }
+
+        /// <summary>
+        /// 通知类型
+        /// </summary>
+        public NotifyType Type { get; set; }
+
+
+        /// <summary>
+        /// 需要选中的页面范围
+        /// </summary>
+        public List<int> PageRange { get; set; }
+    }
+
+    public enum NotifyType
+    {
+        /// <summary>
+        /// 刷新页面范围
+        /// </summary>
+        RefreshPage,
+        /// <summary>
+        /// 选中项
+        /// 通过绑定Selected属性来设置选中项有更新不准确的问题
+        /// </summary>
+        SelectItems
     }
 }

+ 85 - 85
PDF Office/Model/DialogNames.cs

@@ -1,93 +1,93 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace PDF_Office.Model
-{
-    /// <summary>
-    /// 记录弹窗的名称
-    /// </summary>
-    public static class DialogNames
-    {
-        /// <summary>
-        /// 文档解密弹窗 需要传参PDFDocument对象
-        /// </summary>
-        public static string VerifyPassWordDialog = "PassWordDialog";
-
-        /// <summary>
-        /// 全屏模式弹窗
-        /// </summary>
-        public static string FullScreenDialog = "FullScreenDialog";
-
-        /// <summary>
-        /// 压缩弹窗
-        /// </summary>
-        public static string CompressDialog = "CompressDialog";
-
-        /// <summary>
-        /// 解压缩弹窗
-        /// </summary>
-        public static string SetPasswordDialog = "SetPasswordDialog";
-
-        /// <summary>
-        /// 解压缩弹窗
-        /// </summary>
-        public static string CheckPasswordDialog = "CheckPasswordDialog";
-
-        /// <summary>
-        /// 删除安全性设置
-        /// </summary>
-        public static string DeleteSafetySettingsDialog = "DeleteSafetySettingsDialog";
-
-        /// <summary>
-        /// 进度条
-        /// </summary>
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PDF_Office.Model
+{
+    /// <summary>
+    /// 记录弹窗的名称
+    /// </summary>
+    public static class DialogNames
+    {
+        /// <summary>
+        /// 文档解密弹窗 需要传参PDFDocument对象
+        /// </summary>
+        public static string VerifyPassWordDialog = "PassWordDialog";
+
+        /// <summary>
+        /// 全屏模式弹窗
+        /// </summary>
+        public static string FullScreenDialog = "FullScreenDialog";
+
+        /// <summary>
+        /// 压缩弹窗
+        /// </summary>
+        public static string CompressDialog = "CompressDialog";
+
+        /// <summary>
+        /// 解压缩弹窗
+        /// </summary>
+        public static string SetPasswordDialog = "SetPasswordDialog";
+
+        /// <summary>
+        /// 解压缩弹窗
+        /// </summary>
+        public static string CheckPasswordDialog = "CheckPasswordDialog";
+
+        /// <summary>
+        /// 删除安全性设置
+        /// </summary>
+        public static string DeleteSafetySettingsDialog = "DeleteSafetySettingsDialog";
+
+        /// <summary>
+        /// 进度条
+        /// </summary>
         public static string CompressProgressBarDialog = "CompressProgressBarDialog";
 
-        /// <summary>
-        /// 页面编辑- 提取弹窗
-        /// </summary>
-        public static string ExtractDialog = "ExtractDialog";
-
-        /// <summary>
-        /// 页面编辑-拆分弹窗
-        /// </summary>
-        public static string SplitDialog = "SplitDialog";
-
-        /// <summary>
-        /// 页面编辑-插入弹窗
-        /// </summary>
-        public static string InsertDialog = "InsertDialog";
-
-        ///<summary>
-        ///主页工具-提取弹窗
-        /// </summary>
-        public static string HomePageExtractDialog = "HomePageExtractDialog";
-
-        ///<summary>
-        ///主页工具-插入弹窗
-        /// </summary
-        public static string HomePageInsertDialog = "HomePageInsertDialog";
-
-        ///<summary>
-        ///主页工具-拆分弹窗
-        /// </summary>
-        public static string HomePageSplitDialog = "HomePageSplitDialog";
-
-        ///<summary>
-        ///主页工具-打印弹窗
-        /// </summary>
+        /// <summary>
+        /// 页面编辑- 提取弹窗
+        /// </summary>
+        public static string ExtractDialog = "ExtractDialog";
+
+        /// <summary>
+        /// 页面编辑-拆分弹窗
+        /// </summary>
+        public static string SplitDialog = "SplitDialog";
+
+        /// <summary>
+        /// 页面编辑-插入弹窗
+        /// </summary>
+        public static string InsertDialog = "InsertDialog";
+
+        ///<summary>
+        ///主页工具-提取弹窗
+        /// </summary>
+        public static string HomePageExtractDialog = "HomePageExtractDialog";
+
+        ///<summary>
+        ///主页工具-插入弹窗
+        /// </summary
+        public static string HomePageInsertDialog = "HomePageInsertDialog";
+
+        ///<summary>
+        ///主页工具-拆分弹窗
+        /// </summary>
+        public static string HomePageSplitDialog = "HomePageSplitDialog";
+
+        ///<summary>
+        ///主页工具-打印弹窗
+        /// </summary>
         public static string HomePagePrinterDialog = "HomePagePrinterDialog";
 
-        ///<summary>
-        ///打印弹窗-打印页面设置
-        /// </summary>
+        ///<summary>
+        ///打印弹窗-打印页面设置
+        /// </summary>
         public static string HomePagePrinterPageSetDialog = "HomePagePrinterPageSetDialog";
 
-        ///<summary>
-        ///主页工具-图片转PDF弹窗
+        ///<summary>
+        ///主页工具-图片转PDF弹窗
         /// </summary>
         public static string HomePagePictureToPDFDialog = "HomePagePictureToPDFDialog";
 
@@ -95,5 +95,5 @@ namespace PDF_Office.Model
         ///BOTA-书签-添加书签弹窗
         /// </summary>
         public static string AddBookmarkDialog = "AddBookmarkDialog";
-    }
+    }
 }

+ 13 - 6
PDF Office/Model/ParameterNames.cs

@@ -11,6 +11,14 @@ namespace PDF_Office.Model
     /// </summary>
     public static class ParameterNames
     {
+        #region ViewModelName
+        public static string MainViewModel = "MainViewModel";
+
+        public static string ViewContentViewModel = "ViewContentViewModel";
+
+        public static string PropertyPanelContentViewModel = "PropertyPanelContentViewModel";
+        #endregion
+
         public static string PDFViewer = "PDFViewer";
 
         public static string FilePath = "FilePath";
@@ -21,12 +29,6 @@ namespace PDF_Office.Model
 
         public static string AddTab = "AddTab";
 
-        public static string MainViewModel = "MainViewModel";
-
-        public static string ViewContentViewModel = "ViewContentViewModel";
-
-        public static string PropertyPanelContentViewModel = "PropertyPanelContentViewModel";
-
         public static string InsertType_File = "Insert_File";
 
         public static string InsertType_Blank = "Insert_Blank";
@@ -37,6 +39,11 @@ namespace PDF_Office.Model
 
         public static string Title = "Title";
 
+        /// <summary>
+        /// BOTA缩略图
+        /// </summary>
+        public static string BOTAThumb = "Thumbnail";
+
         /// <summary>
         /// 用于弹窗传参的数据模型
         /// </summary>

+ 5 - 1
PDF Office/ViewModels/BOTA/BOTAContentViewModel.cs

@@ -64,7 +64,7 @@ namespace PDF_Office.ViewModels.BOTA
         private void InitDictionartViewNameByTabItem(ref Dictionary<string, string> viewNameByTabItem)
         {
             //绑定tabitem名字和对应的View控件名称
-            viewNameByTabItem.Add("TabItemThumbnail", "");
+            viewNameByTabItem.Add("TabItemThumbnail", "PageEditContent");
             viewNameByTabItem.Add("TabItemOutLine", "");
             viewNameByTabItem.Add("TabItemBookMark", "BookmarkContent");
             viewNameByTabItem.Add("TabItemAnnotation", "");
@@ -81,6 +81,10 @@ namespace PDF_Office.ViewModels.BOTA
         {
             NavigationParameters param = new NavigationParameters();
             param.Add(ParameterNames.PDFViewer, pdfViewer);
+            if(currentBar== "TabItemThumbnail")
+            {
+                param.Add(ParameterNames.BOTAThumb,true);
+            }
             regions.RequestNavigate(BOTAContentRegionName, viewNameByTabItem[currentBar], param);
         }
 

+ 122 - 14
PDF Office/ViewModels/PageEdit/PageEditContentViewModel.cs

@@ -39,8 +39,24 @@ namespace PDF_Office.ViewModels.PageEdit
 
         private IEventAggregator eventor;
 
+        /// <summary>
+        /// 用于筛选多窗体时间的唯一识别码
+        /// </summary>
         private string unicode = null;
 
+        /// <summary>
+        /// Undo操作记录栈
+        /// 只有插入、移位、旋转,倒序需要记录
+        /// </summary>
+        private Stack<PageEditItem> UndoStack = new Stack<PageEditItem>();
+
+        /// <summary>
+        /// Redo操作记录栈
+        /// </summary>
+
+        private Stack<PageEditItem> RedoStack = new Stack<PageEditItem>();
+
+
         /// <summary>
         /// 项数据集合
         /// </summary>
@@ -103,6 +119,10 @@ namespace PDF_Office.ViewModels.PageEdit
                 TbPageRangeVisibility = Visibility.Visible;
                 TbPageRange = (ListSelectedIndex + 1).ToString();
                 TxtPageInputVisibility = Visibility.Collapsed;
+                if(IsBOTAThumb==Visibility.Visible&&PDFViewer!=null)
+                {
+                    PDFViewer.GoToPage(listSelecedIndex);
+                }
             }
         }
 
@@ -196,6 +216,33 @@ namespace PDF_Office.ViewModels.PageEdit
             }
         }
 
+
+        private string toastText;
+        /// <summary>
+        /// Toast提示
+        /// </summary>
+        public string ToastText
+        {
+            get { return toastText; }
+            set
+            {
+                SetProperty(ref toastText, value);
+            }
+        }
+
+
+        private Visibility isBOTAThumb = Visibility.Collapsed;
+        /// <summary>
+        /// 是否是BOTA侧边栏的缩略图
+        /// </summary>
+        public Visibility IsBOTAThumb
+        {
+            get { return isBOTAThumb; }
+            set
+            {
+                SetProperty(ref isBOTAThumb, value);
+            }
+        }
         #endregion
 
         #region 命令
@@ -219,7 +266,7 @@ namespace PDF_Office.ViewModels.PageEdit
         /// <summary>
         /// 插入文件命令
         /// </summary>
-        public DelegateCommand<Object> InsertCommand { get; set; }
+        public DelegateCommand<object> InsertCommand { get; set; }
 
         /// <summary>
         /// 拆分文件
@@ -290,6 +337,7 @@ namespace PDF_Office.ViewModels.PageEdit
             //订阅页面刷新事件
             eventAggregator.GetEvent<PageEditRefreshEvent>().Subscribe(OnPageEditRefreshEvent, e => e.Unicode == unicode);
 
+
             RefreshPageRangeItem();
         }
 
@@ -468,6 +516,11 @@ namespace PDF_Office.ViewModels.PageEdit
                     pages.Add(i);
                 }
             }
+            if(pages.Count<=1)
+            {
+                ShowToast("请至少选择两个图片进行倒序操作。");
+                return;
+            }
             pages.Sort();
 
             for (int i = 0; i < pages.Count; i++)
@@ -535,10 +588,7 @@ namespace PDF_Office.ViewModels.PageEdit
         /// </summary>
         private void ZoomInCommandEvent()
         {
-            for (int i = 0; i < PageEditItems.Count; i++)
-            {
-                PageEditItems[i].ItemSize = new Size(PageEditItems[i].ItemSize.Width * 2, PageEditItems[i].ItemSize.Height * 2);
-            }
+            ChangeItemSize(new Size(PageEditItems[0].ItemSize.Width *2, PageEditItems[0].ItemSize.Height *2));
             ZoomIndex++;
 
             NotifyUIToRefresh();
@@ -548,13 +598,22 @@ namespace PDF_Office.ViewModels.PageEdit
         /// 缩小页面
         /// </summary>
         private void ZoomOutCommandEvent()
+        {
+            ChangeItemSize(new Size(PageEditItems[0].ItemSize.Width / 2, PageEditItems[0].ItemSize.Height / 2));
+            ZoomIndex--;
+            NotifyUIToRefresh();
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="newsize"></param>
+        public void ChangeItemSize(Size newsize)
         {
             for (int i = 0; i < PageEditItems.Count; i++)
             {
-                PageEditItems[i].ItemSize = new Size(PageEditItems[i].ItemSize.Width / 2, PageEditItems[i].ItemSize.Height / 2);
+                PageEditItems[i].ItemSize = newsize;
             }
-            ZoomIndex--;
-            NotifyUIToRefresh();
         }
 
         private bool CanZoomIn()
@@ -709,14 +768,47 @@ namespace PDF_Office.ViewModels.PageEdit
         #endregion
 
         #region 方法
+        /// <summary>
+        /// 退出页面编辑面试,回到阅读页
+        /// </summary>
+        public void BackToPDFViewer(int PageIndex)
+        {
+            PDFViewer.GoToPage(PageIndex);
+            viewContentViewModel.ExitToolMode();
+        }
+
+        /// <summary>
+        /// 显示Toast提示
+        /// </summary>
+        private void ShowToast(string content)
+        {
+            if (!string.IsNullOrEmpty(content))
+            {
+                ToastText = content;
+            }
+            else
+            {
+                ToastText = "操作失败";
+            }
+            ShowTip = Visibility.Visible;
+        }
 
         /// <summary>
         /// 通知UI刷新页面范围
+        /// 或通过xaml来设置选中项
         /// </summary>vb nmjvcx
-        private void NotifyUIToRefresh()
+        private void NotifyUIToRefresh(List<int> pageRange=null)
         {
-            //通知UI刷新页面范围
-            eventor.GetEvent<PageEditNotifyEvent>().Publish(new PageEditNotifyEventArgs() { Unicode = unicode });
+            if (pageRange == null || pageRange.Count <= 0)
+            {
+                //通知UI刷新页面范围
+                eventor.GetEvent<PageEditNotifyEvent>().Publish(new PageEditNotifyEventArgs(unicode));
+            }
+            else
+            {
+                //通知UI刷新页面范围
+                eventor.GetEvent<PageEditNotifyEvent>().Publish(new PageEditNotifyEventArgs(unicode,NotifyType.SelectItems,pageRange));
+            }
         }
 
         /// <summary>
@@ -960,7 +1052,7 @@ namespace PDF_Office.ViewModels.PageEdit
                 if (pageRange.Item2 - pageRange.Item1 > 30)
                 {
                     //范围较大时,通知UI获取更准确的刷新范围
-                    eventor.GetEvent<PageEditNotifyEvent>().Publish(new PageEditNotifyEventArgs() { Unicode = unicode });
+                    NotifyUIToRefresh();
                 }
                 else
                 {
@@ -1119,7 +1211,7 @@ namespace PDF_Office.ViewModels.PageEdit
         /// </summary>
         private void GetSourceItems(bool isFirstLoad)
         {
-            if (isFirstLoad)
+            if (isFirstLoad||IsBOTAThumb==Visibility.Visible)
             {
                 PageEditItems.Clear();
                 for (int i = 0; i < PDFViewer.Document.PageCount; i++)
@@ -1204,7 +1296,7 @@ namespace PDF_Office.ViewModels.PageEdit
         {
             try
             {
-                if (PageEditItems.Count >= pageIndex + 1 && !PageEditItems[pageIndex].IsGetImage)
+                if (PageEditItems.Count >= pageIndex + 1)
                 {
                     PixelFormat fmt = PixelFormats.Bgra32;
                     BitmapSource bps = BitmapSource.Create(w, h, 96.0, 96.0, fmt, null, thumb, (w * fmt.BitsPerPixel + 7) / 8);
@@ -1240,14 +1332,22 @@ namespace PDF_Office.ViewModels.PageEdit
         {
             navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
             navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
+            bool isBOTA = false;
+            navigationContext.Parameters.TryGetValue<bool>(ParameterNames.BOTAThumb, out isBOTA);
             if (PDFViewer != null)
             {
                 if (isFirstLoad)
                 {
                     PDFViewer.OnThumbnailGenerated += PDFViewer_OnThumbnailGenerated;
+                    PDFViewer.InfoChanged += PDFViewer_InfoChanged;
                     ZoomIndex = 0;
 
                 }
+                //BOTA缩略图时,显示不同的菜单栏
+                if(isBOTA)
+                {
+                    IsBOTAThumb = Visibility.Visible;
+                }
 
                 GetSourceItems(isFirstLoad);
 
@@ -1257,6 +1357,14 @@ namespace PDF_Office.ViewModels.PageEdit
                 isFirstLoad = false;
             }
         }
+
+        private void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
+        {
+            if(e.Key== "PageNum")
+            {
+                NotifyUIToRefresh(new List<int> { (int)e.Value});
+            }
+        }
         #endregion
     }
 }

+ 26 - 4
PDF Office/ViewModels/ViewContentViewModel.cs

@@ -154,7 +154,9 @@ namespace PDF_Office.ViewModels
         }
 
         private bool canUndo;
-
+        /// <summary>
+        /// 是否可以进行Undo
+        /// </summary>
         public bool CanUndo
         {
             get { return canUndo; }
@@ -165,7 +167,9 @@ namespace PDF_Office.ViewModels
         }
 
         private bool canRedo;
-
+        /// <summary>
+        /// 是否可以进行Redo
+        /// </summary>
         public bool CanRedo
         {
             get { return canRedo; }
@@ -192,6 +196,20 @@ namespace PDF_Office.ViewModels
             }
         }
 
+        private int selectedIndex;
+        /// <summary>
+        /// 工具栏选中项的索引
+        /// </summary>
+        public int TabSelectedIndex
+        {
+            get { return selectedIndex; }
+            set
+            {
+                SetProperty(ref selectedIndex, value);
+            }
+        }
+
+
         private bool openBOTA = false;
         /// <summary>
         /// 是否展开BOTA
@@ -201,7 +219,7 @@ namespace PDF_Office.ViewModels
             get { return openBOTA; }
             set { 
                 openBOTA = value; 
-                if(openBOTA)
+                if(openBOTA&&BOTAWidth.Value<=48)
                 {
                     BOTAWidth = new GridLength(256);
                 }
@@ -228,7 +246,6 @@ namespace PDF_Office.ViewModels
         private double[] zoomLevel = { 1.00f, 10, 25, 50, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
         #endregion
 
-
         #region 命令
         public DelegateCommand LoadFile { get; set; }
 
@@ -756,6 +773,11 @@ namespace PDF_Office.ViewModels
         public void ExitToolMode()
         {
             ToolContentVisible = Visibility.Collapsed;
+            if(isInPageEdit)
+            {
+                TabSelectedIndex = 0;
+                isInPageEdit = false;
+            }
         }
         #endregion
     }

+ 46 - 18
PDF Office/Views/PageEdit/PageEditContent.xaml

@@ -20,6 +20,7 @@
     d:DesignWidth="800"
     prism:ViewModelLocator.AutoWireViewModel="True"
     IsVisibleChanged="PageEdit_IsVisibleChanged"
+    SizeChanged="PageEdit_SizeChanged"
     mc:Ignorable="d">
     <UserControl.Resources>
         <ResourceDictionary>
@@ -100,22 +101,22 @@
             </DataTemplate>
 
             <ContextMenu x:Key="ListBoxItemMenu">
-                <MenuItem Header="插入页面" >
-                    <MenuItem Header="插入文件"/>
-                    <MenuItem Header="插入空白页"/>
-                    <MenuItem Header="插入自定义页面"/>
+                <MenuItem Header="插入页面">
+                    <MenuItem Header="插入文件" />
+                    <MenuItem Header="插入空白页" />
+                    <MenuItem Header="插入自定义页面" />
                 </MenuItem>
-                <MenuItem Header="提取页面"/>
-                <MenuItem Header="替换页面"/>
-                <MenuItem Header="删除页面"/>
-                <MenuItem Header="删除页面"/>
-                <MenuItem Header="顺时针旋转页面"/>
-                <MenuItem Header="逆时针旋转页面"/>
-                <MenuItem Header="复制"/>
-                <MenuItem Header="剪切"/>
+                <MenuItem Header="提取页面" />
+                <MenuItem Header="替换页面" />
+                <MenuItem Header="删除页面" />
+                <MenuItem Header="删除页面" />
+                <MenuItem Header="顺时针旋转页面" />
+                <MenuItem Header="逆时针旋转页面" />
+                <MenuItem Header="复制" />
+                <MenuItem Header="剪切" />
                 <MenuItem Header="粘贴" />
-                <MenuItem Header="显示页面大小"/>
-                <MenuItem Header="打印页面"/>
+                <MenuItem Header="显示页面大小" />
+                <MenuItem Header="打印页面" />
             </ContextMenu>
         </ResourceDictionary>
     </UserControl.Resources>
@@ -123,10 +124,10 @@
     <Border BorderBrush="#F2F2F2" BorderThickness="0,1,0,0">
         <Grid DragOver="Grid_DragOver">
             <Grid.RowDefinitions>
-                <RowDefinition Height="40" />
+                <RowDefinition Height="auto" />
                 <RowDefinition />
             </Grid.RowDefinitions>
-            <Grid Background="#FFFFFF">
+            <Grid Height="40" Background="#FFFFFF">
                 <StackPanel
                     Name="StkpnlCenter"
                     HorizontalAlignment="Center"
@@ -269,12 +270,38 @@
                     </Button>
                 </StackPanel>
             </Grid>
+            <Grid
+                Name="GridBOTAHeader"
+                Height="52"
+                VerticalAlignment="Center"
+                Background="#F3F3F3"
+                Visibility="{Binding IsBOTAThumb}">
+                <TextBlock
+                    Margin="16,0"
+                    VerticalAlignment="Center"
+                    FontSize="14"
+                    LineHeight="20"
+                    Text="缩略图" />
+                <ToggleButton
+                    Name="TbnTwoLine"
+                    Width="16"
+                    Height="16"
+                    Margin="16,0"
+                    Click="TbnTwoLine_Click"
+                    HorizontalAlignment="Right" />
+                <Separator
+                    Height="1"
+                    Margin="16,0"
+                    VerticalAlignment="Bottom"
+                    Background="#DDDDDD" />
+            </Grid>
             <ListBox
                 Name="ListPageEdit"
                 Grid.Row="1"
                 Padding="0"
                 AllowDrop="True"
                 Background="#E7E9EC"
+                BorderThickness="0"
                 Drop="ListPageEdit_Drop"
                 ItemTemplate="{StaticResource PageEditListBoxItemTemplate}"
                 ItemsSource="{Binding PageEditItems}"
@@ -295,7 +322,8 @@
                         <Setter Property="HorizontalContentAlignment" Value="Center" />
                         <Setter Property="VerticalContentAlignment" Value="Center" />
                         <Setter Property="ContextMenu" Value="{StaticResource ListBoxItemMenu}" />
-                        <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/>
+                        <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown" />
+                        <EventSetter Event="PreviewMouseDoubleClick" Handler="ListBoxItem_PreviewMouseDoubleClick" />
                     </Style>
                 </ListBox.ItemContainerStyle>
                 <ListBox.ItemsPanel>
@@ -358,7 +386,7 @@
                 CornerRadius="4"
                 FontSize="14"
                 Foreground="White"
-                StringContent="Press Esc To Exit Full Mode"
+                StringContent="{Binding ToastText}"
                 Visibility="{Binding ShowTip}"
                 Duration="0:0:0:3" />
             <ProgressBar

+ 88 - 15
PDF Office/Views/PageEdit/PageEditContent.xaml.cs

@@ -1,6 +1,7 @@
 using PDF_Office.EventAggregators;
 using PDF_Office.Helper;
 using PDF_Office.Model.PageEdit;
+using PDF_Office.ViewModels.PageEdit;
 using Prism.Events;
 using System;
 using System.Collections.Generic;
@@ -96,6 +97,8 @@ namespace PDF_Office.Views.PageEdit
         //自动滚动速度
         private int speed = 0;
 
+        private PageEditContentViewModel viewModel;
+
         public PageEditContent()
         {
             InitializeComponent();
@@ -110,6 +113,8 @@ namespace PDF_Office.Views.PageEdit
             timer.Interval = TimeSpan.FromSeconds(0.3);
             timer.Tick += Timer_Tick;
 
+            viewModel = this.DataContext as PageEditContentViewModel;
+
             //订阅页面刷新事件
             eventor.GetEvent<PageEditNotifyEvent>().Subscribe(OneNotifyEvent, e => e.Unicode == unicode);
         }
@@ -120,19 +125,41 @@ namespace PDF_Office.Views.PageEdit
             timer.Stop();
         }
 
-        private void OneNotifyEvent(PageEditNotifyEventArgs  e)
+        private void OneNotifyEvent(PageEditNotifyEventArgs e)
         {
-            PulishEvent();
+            if (e.Type == NotifyType.RefreshPage)
+            {
+                PulishEvent();
+            }
+            else
+            {
+                if (e.Type == NotifyType.SelectItems)
+                {
+                    if (e.PageRange.Count == 1)
+                    {
+                        ListPageEdit.SelectedIndex = e.PageRange[0] - 1;
+                        ListPageEdit.ScrollIntoView(ListPageEdit.SelectedItem);
+                    }
+                    else
+                    {
+                        ListPageEdit.SelectedItems.Clear();
+                        for (int i = 0; i < e.PageRange.Count; i++)
+                        {
+                            ListPageEdit.SelectedItems.Add(ListPageEdit.Items[e.PageRange[i] - 1]);
+                        }
+                    }
+                }
+            }
         }
 
 
-        #region UI事件
-        /// <summary>
-        /// 每次显示的时候就触发事件,刷新所有图片
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void PageEdit_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
+            #region UI事件
+            /// <summary>
+            /// 每次显示的时候就触发事件,刷新所有图片
+            /// </summary>
+            /// <param name="sender"></param>
+            /// <param name="e"></param>
+            private void PageEdit_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
         {
             if((bool)e.NewValue)
             {
@@ -316,12 +343,12 @@ namespace PDF_Office.Views.PageEdit
                     }
                     var scroll = GetScrollHost(ListPageEdit);
 
-                    //string tempPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Temp.pdf");
-                    //System.IO.File.Create(tempPath);
-                    //string[] files = new string[1];
-                    //files[0] = tempPath;
-                    DataObject dataObj = new DataObject(DataFormats.FileDrop);
-                    DragDrop.DoDragDrop(ListPageEdit, dataObj, DragDropEffects.Move);
+                    string tempPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Temp.pdf");
+                    System.IO.File.Create(tempPath);
+                    string[] files = new string[1];
+                    files[0] = tempPath;
+                    DataObject dataObj = new DataObject(DataFormats.FileDrop, files);
+                    DragDrop.DoDragDrop(ListPageEdit, dataObj, DragDropEffects.Copy);
                     Mouse.Capture(ListPageEdit);
                     return;
                 }
@@ -927,5 +954,51 @@ namespace PDF_Office.Views.PageEdit
             
             //e.Handled = true;
         }
+
+        private void ListBoxItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            if(e.ChangedButton== MouseButton.Left)
+            {         
+                //双击回到PDFViewer界面
+                var item = sender as ListBoxItem;
+                if (item != null)
+                {
+                    var index = ListPageEdit.ItemContainerGenerator.IndexFromContainer(item);
+                    //双击事件无法绑定Command 暂时采用这种方式调用VM里的方法
+                    viewModel.BackToPDFViewer(index);
+                }
+            }
+        }
+
+        private void PageEdit_SizeChanged(object sender, SizeChangedEventArgs e)
+        {
+            //BOTA缩略图模式下需要调整Item宽度
+            if (GridBOTAHeader.Visibility == Visibility.Visible)
+            {
+                ItemSuitAcutalWidth(e.NewSize.Width);
+            }
+        }
+
+        private void ItemSuitAcutalWidth(double width)
+        {
+            //缩略图模式下,保持一列或者两列显示
+            if ((bool)TbnTwoLine.IsChecked)
+            {
+                var itemwidth = (width - 80) / 2;
+                var itemHeight = 294 * itemwidth / 208.0;
+                viewModel.ChangeItemSize(new Size(itemwidth, itemHeight));
+            }
+            else
+            {
+                var itemwidth = 0.6 * width;
+                var itemheight = 294 * itemwidth / 208.0;
+                viewModel.ChangeItemSize(new Size(itemwidth,itemheight));
+            }
+        }
+
+        private void TbnTwoLine_Click(object sender, RoutedEventArgs e)
+        {
+            ItemSuitAcutalWidth(this.ActualWidth);
+        }
     }
 }

+ 1 - 0
PDF Office/Views/ViewContent.xaml

@@ -97,6 +97,7 @@
             HorizontalAlignment="Center"
             VerticalAlignment="Top"
             BorderThickness="0"
+            SelectedIndex="{Binding TabSelectedIndex, Mode=TwoWay}"
             Style="{StaticResource TabControlWithUnderLineStyle}">
             <cus:IconAndTextTabItem
                 x:Name="TabItemAnnotation"