WPF TextBox 控件获取热键并转为 win32 Keys

来源:互联网 发布:淘宝数据包 编辑:程序博客网 时间:2024/06/05 11:44

WPF 中使用的 Key 对象与 WinForm 中的 Keys 不同,两者的按键枚举对象与物理键的映射关系有功能键上有区别,无法进行类型强制转换。使用 win api 注册热键时,需要将之转换成 win32 的键值,可以使用 KeyInterop.VirtualKeyFromKey(),另外,Keys 可以保存组合鍵,Key 则只是单个按键。Keys 的成员中有个 Modifiers,从下图可以看出 0~15位之外,是用来存放功能键的。 从两张图对比上,可以直观地发现两者的区别。


示例代码:

using System.Windows.Input;namespace demo.Controls{    class HotKeyTextBox : BeiLiNu.Ui.Controls.WPF.Controls.XTextBox    {        private System.Windows.Forms.Keys pressedKeys = System.Windows.Forms.Keys.None;        protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)        {            int keyValue = KeyInterop.VirtualKeyFromKey(e.Key);            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)            {                keyValue += (int)System.Windows.Forms.Keys.Control;            }            if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)            {                keyValue += (int)System.Windows.Forms.Keys.Alt;            }            if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)            {                keyValue += (int)System.Windows.Forms.Keys.Shift;            }                        this.Keys = (System.Windows.Forms.Keys) keyValue;            e.Handled = true;                   }        public System.Windows.Forms.Keys Keys        {            get { return pressedKeys; }            set            {                pressedKeys = value;                setText(value);            }        }        private void setText(System.Windows.Forms.Keys keys)        {            this.Text = keys.ToString();        }    }}


0 0
原创粉丝点击