如何在KeyRoutedEventArgs e中处理VirtualKey枚举中的缺失值

时间:2015-08-19 14:23:41

标签: c# .net xaml input

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

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

不幸的是,枚举缺少许多键,例如逗号,代字号甚至退格键。

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

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

1 个答案:

答案 0 :(得分:4)

Backspace可用,它是VirtualKey.Back。

逗号键通常是Oemcomma,它是(VirtualKey)188。波形符号通常需要按住Shift键并按下Oem8键,它是(VirtualKey)223。在我的脖子上,但不是在西班牙语键盘上,他们使用它很多,所以有一个专用的键,他们必须按AltGr + D4得到一个普通的代字号。您通常可以通过查看System.Windows.Forms.Keys枚举和/或使用调试器来反向设计其他缺失的那些。

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

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