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

4 篇文章 0 订阅

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();
        }
    }
}


阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: WPFWindows Presentation Foundation)的TextBox件有一个属性叫做InputScope,可以用来指定TextBox的输入类型。通过设置InputScope为数字(set InputScope to Number),当TextBox获取焦点时,会弹出虚拟数字盘,方便用户进行数字输入。 在XAML中,可以这样设置TextBox的InputScope: <TextBox InputScope="Number" /> 同时,还可以在后台代码中动态地设置InputScope: myTextBox.InputScope = new InputScope { Names = { new InputScopeName() { NameValue = InputScopeNameValue.Number } } }; 需要注意的是,InputScope并不是只有数字一种类型,还有日期、电话号码、邮箱地址、网址等多种类型可供选择。选择合适的InputScope有助于提高应用程序的用户体验和易用性。 ### 回答2: 当WPF textbox获取焦点时,虚拟数字盘的实现需要考虑多个方面。首先,需要确定使用哪种虚拟数字盘,例如Windows自带的虚拟数字盘或第三方库提供的虚拟数字盘。其次,需要根据焦点位置和用户设备类型(如触摸屏幕)来判断是否需要在WPF应用程序中显示虚拟数字盘。 对于WPF中的虚拟数字盘实现,可以使用以下步骤: 1. 创建WPF窗口或用户件,并在其中添加一个textbox件。 2. 按下textbox件时触发相关事件,在事件处理函数中判断使用哪种虚拟数字盘。 3. 在事件处理函数中显示虚拟数字盘。可以在WPF中轻松创建自定义件,以实现虚拟数字盘的显示和响应逻辑。 4. 确定数字盘的位置和大小,以使其与输入框对齐,并能够轻松输入数字。 5. 处理数字盘输入逻辑。可以在虚拟数字盘上放置按钮,并在用户点击时触发事件,将数字添加到textbox件中。 6. 处理虚拟数字盘的隐藏逻辑。可以在输入完成后自动隐藏虚拟数字盘,或者在用户点击盘上的“完成”按钮时手动隐藏。 总之,WPF textbox获取焦点时的虚拟数字盘实现可以帮助用户更轻松地输入数字,并且使用户体验更加良好和便捷。 ### 回答3: 当WPFTextBox获取焦点时,系统会自动弹出虚拟数字盘,供用户输入数字内容。这种操作非常方便,用户无需再手动打开虚拟盘进行输入。 虚拟数字盘是一种模拟物理数字盘的软件工具,它通常出现在屏幕上,通过鼠标或触摸屏幕等设备输入数字。虚拟数字盘的输入方式与物理数字盘相同,可以方便地进行数字输入,特别适合在触摸屏设备上使用。 在WPF中,TextBox获取焦点时自动弹出虚拟数字盘,不仅方便用户进行数字输入,而且也符合现代化的操作习惯,提高了用户操作的效率和体验。 总之,WPFTextBox获取焦点时弹出虚拟数字盘是一项实用的功能,极大地方便了用户进行数字输入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mostone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值