Parcourir la source

快捷键 - 快捷键响应接口

chenrongqian@kdanmobile.com il y a 2 ans
Parent
commit
81475e4b91

+ 100 - 0
PDF Office/Helper/KeyEventsHelper.cs

@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Input;
+
+namespace PDF_Office.Helper
+{
+    //全局快捷键响应
+    public static class KeyEventsHelper
+    {
+        #region Todo 快捷键绑定解绑在其他地方使用
+        //绑定:KeyEventsHelper.KeyDown += ShortCut_KeyDown;
+        //解绑:KeyEventsHelper.KeyDown -= ShortCut_KeyDown;
+
+        #endregion Todo 快捷键绑定解绑在其他地方使用
+
+        public static event EventHandler<KeyEventArgs> KeyDown;
+        private static KeyEventArgs args;
+        static KeyEventsHelper()
+        {
+            EventManager.RegisterClassHandler(typeof(Window), UIElement.KeyDownEvent, (KeyEventHandler)onKeyDown);
+        }
+
+        private static void onKeyDown(object sender, KeyEventArgs e)
+        {
+            if (e != null)
+            {
+                args = e;
+                KeyDown?.Invoke(sender, e);
+            }
+
+        }
+
+        /// <summary>
+        /// 按下单一键,例如:只按下H有效;同时按下其他修饰键如ctrl等无效
+        /// </summary>
+        public static bool IsSingleKey(Key currentkey)
+        {
+            if(args == null) return false;
+
+            if (args.Key == currentkey && args.KeyboardDevice.Modifiers == ModifierKeys.None)
+            {
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 组合键 = 修饰键+序列键
+        /// 例如:同时按下Ctrl + H 或(同时按下Ctrl + [Key=None无任何键]),同时再按下其他修饰键则无响应
+        /// </summary>
+        public static bool IsModifierKey(ModifierKeys modifier, Key currentkey)
+        {
+            if (args == null) return false;
+
+            if (args.Key == currentkey && args.KeyboardDevice.Modifiers == modifier)
+            {
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 例如:按下此键外,再按下其他键也响应(不常用,特殊处理)
+        /// </summary>
+        public static bool IsKeyDown(Key currentkey)
+        {
+            if (args == null) return false;
+
+            if (Keyboard.IsKeyDown(currentkey))
+            {
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 例如:同时按下一个或多个键外,再按下其他键也响应(不常用,特殊处理)
+        /// </summary>
+        public static bool IsKeyDown(List<Key> keys)
+        {
+            if (args == null || keys == null || keys.Count > 0) return false;
+
+            bool result = false;
+            foreach (Key key in keys)
+            {
+                result |= Keyboard.IsKeyDown(key);
+            }
+
+            if (result)
+            {
+                return true;
+            }
+            return false;
+        }
+    }
+}

+ 1 - 0
PDF Office/PDF Office.csproj

@@ -332,6 +332,7 @@
     <Compile Include="Helper\CacheFilePath.cs" />
     <Compile Include="Helper\ConverterHelper.cs" />
     <Compile Include="Helper\CropPageUndoManager.cs" />
+    <Compile Include="Helper\KeyEventsHelper.cs" />
     <Compile Include="Helper\Win32Helper.cs" />
     <Compile Include="Helper\DpiHelpers.cs" />
     <Compile Include="Helper\EditToolsHelper.cs" />

+ 5 - 0
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Command.cs

@@ -42,6 +42,9 @@ namespace PDF_Office.ViewModels.Tools
             propertyPanel.DefaultStored += AnnotProperty_DefaultStored;
             propertyPanel.AnnotTypeChanged -= AnnotPropertyPanel_AnnotTypeChanged;
             propertyPanel.AnnotTypeChanged += AnnotPropertyPanel_AnnotTypeChanged;
+            //快捷键
+            KeyEventsHelper.KeyDown -= ShortCut_KeyDown;
+            KeyEventsHelper.KeyDown += ShortCut_KeyDown;
         }
 
         private void UnBindingEvent()
@@ -49,6 +52,8 @@ namespace PDF_Office.ViewModels.Tools
             propertyPanel.DataChanged -= AnnotPropertyPanel_DataChanged;
             propertyPanel.DefaultStored -= AnnotProperty_DefaultStored;
             propertyPanel.AnnotTypeChanged -= AnnotPropertyPanel_AnnotTypeChanged;
+            //快捷盘解绑
+            KeyEventsHelper.KeyDown -= ShortCut_KeyDown;
         }
 
         private void BindingPDFViewerHandler()

+ 21 - 1
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.cs

@@ -36,6 +36,7 @@ using System.Windows.Forms;
 using System.Windows.Input;
 using System.Windows.Media;
 using ContextMenu = System.Windows.Controls.ContextMenu;
+using KeyEventArgs = System.Windows.Input.KeyEventArgs;
 using MenuItem = System.Windows.Controls.MenuItem;
 
 namespace PDF_Office.ViewModels.Tools
@@ -106,7 +107,7 @@ namespace PDF_Office.ViewModels.Tools
 
         private void Esc_KeyDown()
         {
-            PDFViewer.SetMouseMode(MouseModes.None);
+            //PDFViewer.SetMouseMode(MouseModes.None);
         }
 
         private void Hand_Click(object obj)
@@ -674,6 +675,25 @@ namespace PDF_Office.ViewModels.Tools
 
         #endregion 阅读页右键菜单
 
+        #region 快捷键
+
+        private void ShortCut_KeyDown(object sender, KeyEventArgs e)
+        {
+            if(KeyEventsHelper.IsSingleKey(Key.Escape))
+            {
+                PDFViewer.SetMouseMode(MouseModes.None);
+            }
+            else if(KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Shift,Key.H))
+            {
+                //高亮注释
+
+            }
+        }
+
+
+        #endregion 快捷键
+
+
         #region Navigation
 
         public bool IsNavigationTarget(NavigationContext navigationContext)