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

我的问题与KeyRoutedEventArgs class中包含的KeyDown事件及其参数有关。按键本身由VirtualKey enumeration描述。

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

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

有没有其他方法可以处理类型化数据,从而为我的自定义控件提供所需的控件?

最佳答案

Backspace是可用的,它是VirtualKey.Back。

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

首字母缩写词OEM提供了提示,说明为什么缺少这些虚拟键代码。 OEM是指原始设备制造商。实际设计和制造键盘的人。由他们决定使用oem键做什么。就像完全忽略它们或赋予它们完全不同的功能或将它们移到不寻常的位置一样。人们在地球上遥远的地方使用键盘会发生这种事情。西方用户很难使用某些键盘布局。当然不是本地人。

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

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

10-12 14:52