Переглянути джерело

注释工具 - 多选注释到属性面板

chenrongqian@kdanmobile.com 2 роки тому
батько
коміт
6393029260

+ 76 - 71
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Command.cs

@@ -142,75 +142,7 @@ namespace PDF_Office.ViewModels.Tools
                         //IsAnnotCreateReset:是否为创建注释的状态
                         if (e.IsAnnotCreateReset == false)
                         {
-                            switch (annot.EventType)
-                            {
-                                case AnnotArgsType.AnnotHighlight:
-                                    e.IsAnnotCreateReset = false;
-                                    GetHighLight(annot as TextHighlightAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotUnderline:
-                                    GetUnderLine(annot as TextUnderlineAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotStrikeout:
-                                    GetStrikeout(annot as TextStrikeoutAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotSquiggly:
-                                    GetSquiggly(annot as TextSquigglyAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotFreehand:
-                                    GetFreehand(annot as FreehandAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotFreeText:
-                                    GetFreetext(annot as FreeTextAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotSquare:
-                                    GetRect(annot as SquareAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotCircle:
-                                    GetCircle(annot as CircleAnnotArgs);
-                                    break;
-
-                                case AnnotArgsType.AnnotLine:
-                                    bool isLine = true;
-                                    if (e.Attribs.ContainsKey(AnnotAttrib.LineStart))
-                                    {
-                                        if ((C_LINE_TYPE)e.Attribs[AnnotAttrib.LineStart] != C_LINE_TYPE.LINETYPE_UNKNOWN && (C_LINE_TYPE)e.Attribs[AnnotAttrib.LineStart] != C_LINE_TYPE.LINETYPE_NONE)
-                                        {
-                                            isLine = false;
-                                        }
-                                    }
-                                    if (e.Attribs.ContainsKey(AnnotAttrib.LineEnd))
-                                    {
-                                        if ((C_LINE_TYPE)e.Attribs[AnnotAttrib.LineEnd] != C_LINE_TYPE.LINETYPE_UNKNOWN && (C_LINE_TYPE)e.Attribs[AnnotAttrib.LineEnd] != C_LINE_TYPE.LINETYPE_NONE)
-                                        {
-                                            isLine = false;
-                                        }
-                                    }
-
-                                    if (isLine)
-                                        GetArrowLine("Line", annot as LineAnnotArgs);
-                                    else
-                                        GetArrowLine("Arrow", annot as LineAnnotArgs);
-
-                                    break;
-
-                                case AnnotArgsType.AnnotLink:
-                                    //viewContentViewModel.IsCreateLink = false;
-                                    GetLink(annot as LinkAnnotArgs, e);
-
-                                    break;
-
-                                case AnnotArgsType.AnnotSticky:
-                                    GetStickyNote(annot as StickyAnnotArgs);
-                                    break;
-                            }
+                            GetSelectedAnnots(e);
                             //记录这次选中的注释,之后创建注释会跟随上次选中注释的属性值
                             PDFViewer.SetToolParam(annot);
                         }
@@ -220,7 +152,7 @@ namespace PDF_Office.ViewModels.Tools
                             {
                                 case AnnotArgsType.AnnotLink:
                                     //viewContentViewModel.IsCreateLink = false;
-                                    GetLink(annot as LinkAnnotArgs, e);
+                                    GetLink(e.AnnotItemsList, e);
                                     PDFViewer.SetToolParam(annot);
                                     break;
                             }
@@ -262,7 +194,7 @@ namespace PDF_Office.ViewModels.Tools
                     }
                     else
                     {
-
+                        GetSelectedAnnots(e);
                     }
 
                 }
@@ -273,6 +205,79 @@ namespace PDF_Office.ViewModels.Tools
             }
         }
 
+        private void GetSelectedAnnots(AnnotAttribEvent e)
+        {
+            var annot = e.AnnotItemsList[0];
+            switch (annot.EventType)
+            {
+                case AnnotArgsType.AnnotHighlight:
+                    GetHighLight(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotUnderline:
+                    GetUnderLine(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotStrikeout:
+                    GetStrikeout(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotSquiggly:
+                    GetSquiggly(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotFreehand:
+                    GetFreehand(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotFreeText:
+                    GetFreetext(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotSquare:
+                    GetRect(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotCircle:
+                    GetCircle(e.AnnotItemsList);
+                    break;
+
+                case AnnotArgsType.AnnotLine:
+                    bool isLine = true;
+                    if (e.Attribs.ContainsKey(AnnotAttrib.LineStart))
+                    {
+                        if ((C_LINE_TYPE)e.Attribs[AnnotAttrib.LineStart] != C_LINE_TYPE.LINETYPE_UNKNOWN && (C_LINE_TYPE)e.Attribs[AnnotAttrib.LineStart] != C_LINE_TYPE.LINETYPE_NONE)
+                        {
+                            isLine = false;
+                        }
+                    }
+                    if (e.Attribs.ContainsKey(AnnotAttrib.LineEnd))
+                    {
+                        if ((C_LINE_TYPE)e.Attribs[AnnotAttrib.LineEnd] != C_LINE_TYPE.LINETYPE_UNKNOWN && (C_LINE_TYPE)e.Attribs[AnnotAttrib.LineEnd] != C_LINE_TYPE.LINETYPE_NONE)
+                        {
+                            isLine = false;
+                        }
+                    }
+
+                    if (isLine)
+                        GetArrowLine("Line", e.AnnotItemsList);
+                    else
+                        GetArrowLine("Arrow", e.AnnotItemsList);
+
+                    break;
+
+                case AnnotArgsType.AnnotLink:
+                    //viewContentViewModel.IsCreateLink = false;
+                    GetLink(e.AnnotItemsList, e);
+
+                    break;
+
+                case AnnotArgsType.AnnotSticky:
+                    GetStickyNote(e.AnnotItemsList);
+                    break;
+            }
+        }
+
         //在注释工具的状态下,右键菜单
         private void PDFViewer_AnnotCommandHandler(object sender, AnnotCommandArgs e)
         {

+ 113 - 84
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Function.cs

@@ -224,12 +224,12 @@ namespace PDF_Office.ViewModels.Tools
         /// 高亮注释
         /// </summary>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetHighLight(TextHighlightAnnotArgs selectedhighlightArgs = null)
+        private AnnotHandlerEventArgs GetHighLight(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             TextHighlightAnnotArgs highlightArgs = null;
 
-            if (selectedhighlightArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 highlightArgs = new TextHighlightAnnotArgs();
                 highlightArgs.Color = Color.FromRgb(0xFF, 0xBB, 0x00);
@@ -241,21 +241,24 @@ namespace PDF_Office.ViewModels.Tools
                     highlightArgs.Transparency = annotProperty.Opacity;
                     highlightArgs.Content = annotProperty.NoteText;
                 }
+
+                if (highlightArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(highlightArgs);
+                }
+
             }
             else
             {
-                highlightArgs = selectedhighlightArgs;
+                highlightArgs = selectedArgs[0] as TextHighlightAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = highlightArgs.Color;
             annotAttribsList[AnnotAttrib.Transparency] = highlightArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = highlightArgs.Content;
 
-            List<AnnotHandlerEventArgs> highlightArgsList = new List<AnnotHandlerEventArgs>();
-            if (highlightArgs != null)
-                highlightArgsList.Add(highlightArgs);
-
-            AddToPropertyPanel("TextAnnotProperty", "HighLight", highlightArgsList, annotAttribsList);
+            AddToPropertyPanel("TextAnnotProperty", "HighLight", selectedArgs, annotAttribsList);
             return highlightArgs;
         }
 
@@ -265,7 +268,7 @@ namespace PDF_Office.ViewModels.Tools
         /// <param name="selectedLinkAnnotArgs"></param>
         /// <param name="annotAttribEvent"></param>
         /// <returns></returns>
-        public AnnotHandlerEventArgs GetLink(LinkAnnotArgs selectedLinkAnnotArgs = null, AnnotAttribEvent annotAttribEvent = null)
+        public AnnotHandlerEventArgs GetLink(List<AnnotHandlerEventArgs> selectedArgs = null, AnnotAttribEvent annotAttribEvent = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             LinkAnnotArgs linkArgs = new LinkAnnotArgs();
@@ -274,9 +277,14 @@ namespace PDF_Office.ViewModels.Tools
             {
             }
 
-            if (selectedLinkAnnotArgs != null)
+
+            if (selectedArgs != null && selectedArgs.Count > 1)
             {
-                linkArgs = selectedLinkAnnotArgs;
+                if (linkArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(linkArgs);
+                }
             }
             else
             {
@@ -289,11 +297,8 @@ namespace PDF_Office.ViewModels.Tools
             annotAttribsList[AnnotAttrib.LinkUri] = linkArgs.URI;
             annotAttribsList[AnnotAttrib.LinkDestIndx] = linkArgs.DestIndex;
 
-            List<AnnotHandlerEventArgs> linkArgsList = new List<AnnotHandlerEventArgs>();
-            if (linkArgs != null)
-                linkArgsList.Add(linkArgs);
 
-            AddToPropertyPanel("LinkAnnotProperty", "Link", linkArgsList, annotAttribsList, annotAttribEvent);
+            AddToPropertyPanel("LinkAnnotProperty", "Link", selectedArgs, annotAttribsList, annotAttribEvent);
             return linkArgs;
         }
 
@@ -302,12 +307,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedunderlineArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetUnderLine(TextUnderlineAnnotArgs selectedunderlineArgs = null)
+        private AnnotHandlerEventArgs GetUnderLine(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             TextUnderlineAnnotArgs underlineArgs = null;
 
-            if (selectedunderlineArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 underlineArgs = new TextUnderlineAnnotArgs();
                 underlineArgs.Color = Color.FromRgb(0x12, 0xFD, 0xFF);
@@ -319,21 +324,23 @@ namespace PDF_Office.ViewModels.Tools
                     underlineArgs.Transparency = annotProperty.Opacity;
                     underlineArgs.Content = annotProperty.NoteText;
                 }
+
+                if (underlineArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(underlineArgs);
+                }
             }
             else
             {
-                underlineArgs = selectedunderlineArgs;
+                underlineArgs = selectedArgs[0] as TextUnderlineAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = underlineArgs.Color;
             annotAttribsList[AnnotAttrib.Transparency] = underlineArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = underlineArgs.Content;
 
-            List<AnnotHandlerEventArgs> underlineArgsList = new List<AnnotHandlerEventArgs>();
-            if (underlineArgs != null)
-                underlineArgsList.Add(underlineArgs);
-
-            AddToPropertyPanel("TextAnnotProperty", "UnderLine", underlineArgsList, annotAttribsList);
+            AddToPropertyPanel("TextAnnotProperty", "UnderLine", selectedArgs, annotAttribsList);
             return underlineArgs;
         }
 
@@ -342,12 +349,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedsquigglyArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetSquiggly(TextSquigglyAnnotArgs selectedsquigglyArgs = null)
+        private AnnotHandlerEventArgs GetSquiggly(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             TextSquigglyAnnotArgs squigglyArgs = null;
 
-            if (selectedsquigglyArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 squigglyArgs = new TextSquigglyAnnotArgs();
                 squigglyArgs.Color = Color.FromRgb(0xFF, 0x87, 0x16);
@@ -359,21 +366,23 @@ namespace PDF_Office.ViewModels.Tools
                     squigglyArgs.Transparency = annotProperty.Opacity;
                     squigglyArgs.Content = annotProperty.NoteText;
                 }
+
+                if (squigglyArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(squigglyArgs);
+                }
             }
             else
             {
-                squigglyArgs = selectedsquigglyArgs;
+                squigglyArgs = selectedArgs[0] as TextSquigglyAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = squigglyArgs.Color;
             annotAttribsList[AnnotAttrib.Transparency] = squigglyArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = squigglyArgs.Content;
 
-            List<AnnotHandlerEventArgs> squigglyArgsList = new List<AnnotHandlerEventArgs>();
-            if (squigglyArgs != null)
-                squigglyArgsList.Add(squigglyArgs);
-
-            AddToPropertyPanel("TextAnnotProperty", "Squiggly", squigglyArgsList, annotAttribsList);
+            AddToPropertyPanel("TextAnnotProperty", "Squiggly", selectedArgs, annotAttribsList);
             return squigglyArgs;
         }
 
@@ -382,12 +391,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedstrikeoutArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetStrikeout(TextStrikeoutAnnotArgs selectedstrikeoutArgs = null)
+        private AnnotHandlerEventArgs GetStrikeout(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             TextStrikeoutAnnotArgs strikeoutArgs = null;
 
-            if (selectedstrikeoutArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 strikeoutArgs = new TextStrikeoutAnnotArgs();
                 strikeoutArgs.Color = Color.FromRgb(0xFF, 0x3B, 0x30);
@@ -399,21 +408,23 @@ namespace PDF_Office.ViewModels.Tools
                     strikeoutArgs.Transparency = annotProperty.Opacity;
                     strikeoutArgs.Content = annotProperty.NoteText;
                 }
+
+                if (strikeoutArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(strikeoutArgs);
+                }
             }
             else
             {
-                strikeoutArgs = selectedstrikeoutArgs;
+                strikeoutArgs = selectedArgs[0] as TextStrikeoutAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = strikeoutArgs.Color;
             annotAttribsList[AnnotAttrib.Transparency] = strikeoutArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = strikeoutArgs.Content;
 
-            List<AnnotHandlerEventArgs> strikeoutArgsList = new List<AnnotHandlerEventArgs>();
-            if (strikeoutArgs != null)
-                strikeoutArgsList.Add(strikeoutArgs);
-
-            AddToPropertyPanel("TextAnnotProperty", "Strikeout", strikeoutArgsList, annotAttribsList);
+            AddToPropertyPanel("TextAnnotProperty", "Strikeout", selectedArgs, annotAttribsList);
             return strikeoutArgs;
         }
 
@@ -422,12 +433,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedfreehandArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetFreehand(FreehandAnnotArgs selectedfreehandArgs = null)
+        private AnnotHandlerEventArgs GetFreehand(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             FreehandAnnotArgs freehandArgs = null;
 
-            if (selectedfreehandArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 freehandArgs = new FreehandAnnotArgs();
                 freehandArgs.InkColor = Color.FromRgb(0x38, 0xE0, 0x2E);
@@ -441,10 +452,16 @@ namespace PDF_Office.ViewModels.Tools
                     freehandArgs.LineWidth = annotProperty.Thickness;
                     freehandArgs.Content = annotProperty.NoteText;
                 }
+
+                if (freehandArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(freehandArgs);
+                }
             }
             else
             {
-                freehandArgs = selectedfreehandArgs;
+                freehandArgs = selectedArgs[0] as FreehandAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = freehandArgs.InkColor;
@@ -452,11 +469,7 @@ namespace PDF_Office.ViewModels.Tools
             annotAttribsList[AnnotAttrib.Thickness] = freehandArgs.LineWidth;
             annotAttribsList[AnnotAttrib.NoteText] = freehandArgs.Content;
 
-            List<AnnotHandlerEventArgs> freehandArgsList = new List<AnnotHandlerEventArgs>();
-            if (freehandArgs != null)
-                freehandArgsList.Add(freehandArgs);
-
-            AddToPropertyPanel("FreehandAnnotProperty", "Freehand", freehandArgsList, annotAttribsList);
+            AddToPropertyPanel("FreehandAnnotProperty", "Freehand", selectedArgs, annotAttribsList);
             return freehandArgs;
         }
 
@@ -465,13 +478,13 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedfreetextArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetFreetext(FreeTextAnnotArgs selectedfreetextArgs = null)
+        private AnnotHandlerEventArgs GetFreetext(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             FreeTextAnnotArgs freetextArgs = null;
             TextAlignment textAlignment;
 
-            if (selectedfreetextArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 freetextArgs = new FreeTextAnnotArgs();
                 freetextArgs.Align = TextAlignment.Left;
@@ -508,10 +521,16 @@ namespace PDF_Office.ViewModels.Tools
                     textAlignment = TextAlignment.Center;
                 else
                     textAlignment = TextAlignment.Right;
+
+                if (freetextArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(freetextArgs);
+                }
             }
             else
             {
-                freetextArgs = selectedfreetextArgs;
+                freetextArgs = selectedArgs[0] as FreeTextAnnotArgs;
                 textAlignment = freetextArgs.Align;
             }
 
@@ -527,11 +546,7 @@ namespace PDF_Office.ViewModels.Tools
             annotAttribsList[AnnotAttrib.TextAlign] = textAlignment;
             annotAttribsList[AnnotAttrib.NoteText] = freetextArgs.TextContent;
 
-            List<AnnotHandlerEventArgs> freetextArgsList = new List<AnnotHandlerEventArgs>();
-            if (freetextArgs != null)
-                freetextArgsList.Add(freetextArgs);
-
-            AddToPropertyPanel("FreetextAnnotProperty", "Freetext", freetextArgsList, annotAttribsList);
+            AddToPropertyPanel("FreetextAnnotProperty", "Freetext", selectedArgs, annotAttribsList);
             return freetextArgs;
         }
 
@@ -540,12 +555,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedStickyArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetStickyNote(StickyAnnotArgs selectedStickyArgs = null)
+        private AnnotHandlerEventArgs GetStickyNote(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             StickyAnnotArgs stickyAnnotArgs = new StickyAnnotArgs();
 
-            if (selectedStickyArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 stickyAnnotArgs.Color = Color.FromRgb(0xFF, 0x81, 0x33);
                 stickyAnnotArgs.StickyNote = string.Empty;
@@ -557,10 +572,16 @@ namespace PDF_Office.ViewModels.Tools
                     stickyAnnotArgs.StickyNote = annotProperty.NoteText;
                     stickyAnnotArgs.Transparency = annotProperty.Opacity;
                 }
+
+                if (stickyAnnotArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(stickyAnnotArgs);
+                }
             }
             else
             {
-                stickyAnnotArgs = selectedStickyArgs;
+                stickyAnnotArgs = selectedArgs[0] as StickyAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = stickyAnnotArgs.Color;
@@ -572,7 +593,7 @@ namespace PDF_Office.ViewModels.Tools
             if (stickyAnnotArgs != null)
                 stickyAnnotArgsList.Add(stickyAnnotArgs);
 
-            AddToPropertyPanel("StickyNoteProperty", "StickyNote", stickyAnnotArgsList, annotAttribsList);
+            AddToPropertyPanel("StickyNoteProperty", "StickyNote", selectedArgs, annotAttribsList);
             return stickyAnnotArgs;
         }
 
@@ -581,12 +602,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedsquareArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetRect(SquareAnnotArgs selectedsquareArgs = null)
+        private AnnotHandlerEventArgs GetRect(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             SquareAnnotArgs squareArgs = null;
 
-            if (selectedsquareArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 squareArgs = new SquareAnnotArgs();
 
@@ -619,10 +640,16 @@ namespace PDF_Office.ViewModels.Tools
                     squareArgs.Transparency = annotProperty.Opacity;
                     squareArgs.Content = annotProperty.NoteText;
                 }
+
+                if (squareArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(squareArgs);
+                }
             }
             else
             {
-                squareArgs = selectedsquareArgs;
+                squareArgs = selectedArgs[0] as SquareAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = squareArgs.LineColor;
@@ -632,11 +659,7 @@ namespace PDF_Office.ViewModels.Tools
             annotAttribsList[AnnotAttrib.Transparency] = squareArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = squareArgs.Content;
 
-            List<AnnotHandlerEventArgs> squareArgsList = new List<AnnotHandlerEventArgs>();
-            if (squareArgs != null)
-                squareArgsList.Add(squareArgs);
-
-            AddToPropertyPanel("SharpsAnnotProperty", "Rect", squareArgsList, annotAttribsList);
+            AddToPropertyPanel("SharpsAnnotProperty", "Rect", selectedArgs, annotAttribsList);
             return squareArgs;
         }
 
@@ -645,12 +668,12 @@ namespace PDF_Office.ViewModels.Tools
         /// </summary>
         /// <param name="selectedcircleAnnotArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetCircle(CircleAnnotArgs selectedcircleAnnotArgs = null)
+        private AnnotHandlerEventArgs GetCircle(List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             CircleAnnotArgs circleAnnotArgs = null;
 
-            if (selectedcircleAnnotArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 circleAnnotArgs = new CircleAnnotArgs();
                 circleAnnotArgs.LineColor = Colors.Red;
@@ -681,10 +704,16 @@ namespace PDF_Office.ViewModels.Tools
                     circleAnnotArgs.Transparency = annotProperty.Opacity;
                     circleAnnotArgs.Content = annotProperty.NoteText;
                 }
+
+                if (circleAnnotArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(circleAnnotArgs);
+                }
             }
             else
             {
-                circleAnnotArgs = selectedcircleAnnotArgs;
+                circleAnnotArgs = selectedArgs[0] as CircleAnnotArgs;
             }
 
             annotAttribsList[AnnotAttrib.Color] = circleAnnotArgs.LineColor;
@@ -694,11 +723,7 @@ namespace PDF_Office.ViewModels.Tools
             annotAttribsList[AnnotAttrib.Transparency] = circleAnnotArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = circleAnnotArgs.Content;
 
-            List<AnnotHandlerEventArgs> circleAnnotArgsList = new List<AnnotHandlerEventArgs>();
-            if (circleAnnotArgs != null)
-                circleAnnotArgsList.Add(circleAnnotArgs);
-
-            AddToPropertyPanel("SharpsAnnotProperty", "Circle", circleAnnotArgsList, annotAttribsList);
+            AddToPropertyPanel("SharpsAnnotProperty", "Circle", selectedArgs, annotAttribsList);
             return circleAnnotArgs;
         }
 
@@ -708,12 +733,12 @@ namespace PDF_Office.ViewModels.Tools
         /// <param name="TagStr"></param>
         /// <param name="selectedLineAnnotArgs"></param>
         /// <returns></returns>
-        private AnnotHandlerEventArgs GetArrowLine(string TagStr, LineAnnotArgs selectedLineAnnotArgs = null)
+        private AnnotHandlerEventArgs GetArrowLine(string TagStr, List<AnnotHandlerEventArgs> selectedArgs = null)
         {
             Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
             LineAnnotArgs lineArgs = new LineAnnotArgs();
 
-            if (selectedLineAnnotArgs == null)
+            if (selectedArgs == null || selectedArgs.Count == 0)
             {
                 lineArgs.LineColor = Colors.Red;
                 lineArgs.HeadLineType = C_LINE_TYPE.LINETYPE_NONE;
@@ -729,10 +754,16 @@ namespace PDF_Office.ViewModels.Tools
                 lineArgs.LineWidth = 1;
                 lineArgs.Transparency = 1;
                 lineArgs.Content = string.Empty;
+
+                if (lineArgs != null)
+                {
+                    selectedArgs = new List<AnnotHandlerEventArgs>();
+                    selectedArgs.Add(lineArgs);
+                }
             }
             else
             {
-                lineArgs = selectedLineAnnotArgs;
+                lineArgs = selectedArgs[0] as LineAnnotArgs;
             }
 
             DefaultAnnotProperty annotProperty = null;
@@ -774,11 +805,7 @@ namespace PDF_Office.ViewModels.Tools
             annotAttribsList[AnnotAttrib.Transparency] = lineArgs.Transparency;
             annotAttribsList[AnnotAttrib.NoteText] = lineArgs.Content;
 
-            List<AnnotHandlerEventArgs> lineArgsList = new List<AnnotHandlerEventArgs>();
-            if (lineArgs != null)
-                lineArgsList.Add(lineArgs);
-
-            AddToPropertyPanel("SharpsAnnotProperty", TagStr, lineArgsList, annotAttribsList);
+            AddToPropertyPanel("SharpsAnnotProperty", TagStr, selectedArgs, annotAttribsList);
             return lineArgs;
         }
 
@@ -1281,7 +1308,9 @@ namespace PDF_Office.ViewModels.Tools
                         linkArgs.DestIndex = annotCommand.PageIndex;
                         PDFViewer.CreatePageAnnot(annotCommand.PageIndex, linkArgs);
                         BtnLinkIsChecked = true;
-                        AnnotHandlerEventArgs annotArgs = GetLink(linkArgs);
+                        List<AnnotHandlerEventArgs> lists = new List<AnnotHandlerEventArgs>();
+                        lists.Add(linkArgs);
+                        AnnotHandlerEventArgs annotArgs = GetLink(lists);
                         PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
                         PDFViewer.SetToolParam(annotArgs);
                         viewContentViewModel.IsPropertyOpen = true;