c# - 如何处理 KeyRoutedEventArgs e 中 VirtualKey 枚举中的缺失值

标签 c# .net xaml input

我使用 C# 扩展了 Windows.UI.Xaml.Controls.TextBox 类,以在用户键入时处理输入的自定义格式。我的逻辑是从两个事件处理程序调用的,一个用于 TextChanged 事件(用于尝试粘贴数据),另一个用于 KeyDown 事件(用于键入的输入)。

我的问题涉及 KeyDown 事件及其参数,它们包含在 KeyRoutedEventArgs class 中. VirtualKey enumeration 描述了按键本身.

不幸的是,枚举缺少许多键,例如逗号、波浪线甚至退格键。

此外,存在 Delete,但当您按下它时,TextChanged 事件在 KeyDown 事件之前得到处理。这可能会扰乱我的控件的行为。

是否有另一种处理类型化数据的方法可以为我提供自定义控件中所需的控件?

最佳答案

Backspace 可用,它是 VirtualKey.Back。

逗号键一般为Oemcomma,即(VirtualKey)188。波浪字符通常需要按住 Shift 键并按下 Oem8 键,它是 (VirtualKey)223。在我的脖子上,但不是在西类牙语键盘上,他们经常使用它,所以有一个专用的 ñ 键,他们必须按 AltGr + D4 才能获得普通波浪号。您通常可以通过查看 System.Windows.Forms.Keys 来对其他缺失的进行逆向工程。枚举和/或使用调试器。

首字母缩略词 OEM 提供了为什么缺少这些虚拟键码的提示。 OEM 是指原始设备制造商。实际设计和制造键盘的人。他们可以自行决定使用 OEM key 做任何他们想做的事情。就像完全省略它们或赋予它们完全不同的功能或将它们移动到不寻常的位置。地球上偏远地区的人们使用的键盘可能会发生这种情况。一些键盘布局对于西方用户来说非常难以使用。当然不是本地人。

换句话说,这些虚拟键代码是有意省略的,因为您不能依赖这些键实际有用或存在于用户设备上。所以你不应该使用它们。 Microsoft 积极地从 WinRT 中删除了导致长期本地化问题的功能。

关于c# - 如何处理 KeyRoutedEventArgs e 中 VirtualKey 枚举中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32098242/

相关文章:

C# 将图像加载到 PictureBox 中而不减慢 UI

c# - 如何在页面刷新时传递字符串?`

wpf - Visual Studio 2012 XAML 设计器 - 不能添加多个项目

xaml - WP 8.1 XAML : Value Does Not Fall Within The Expected Range

c# - 如何在 C# 中从 file1 中删除 file2 中存在的行

c# - ReSharper 声称我的表达总是正确的?它是正确的还是错误?

c# - 从 List<string[]> 到 String[,]

c# - 遍历数据表并删除行

c# - 执行多线程 foreach 循环的最佳方法

c# - 使用单独的数据库表在 DataGridComboBoxColumn 中设置 ItemSource