【发布时间】:2024-01-22 22:44:01
【问题描述】:
在标准 .NET 中,存在 ToAscii/ToUnicode 和 MapVirtualKey 函数来处理此功能,但似乎尚未将等效函数或库引入 Metro/WinRT。如果 Metro/WinRT 中实际上没有公开的等效函数或库,那么这将使自定义文本输入框很难在美国以外的国家/地区推向市场。 具体示例:在我的自定义控件中,如果法语键盘用户按下 è、ù、é 或 à 键,则无法将它们翻译成正确的字符。例如,è 使用 VirtualKey.Number7 的扫描码,据我所知,没有办法知道键盘布局,也没有简单的方法可以根据当前键盘布局翻译该扫描码。 有人知道这方面的信息吗?
【问题讨论】:
-
您不能使用
WM_CHAR的等效项吗?应该有某种事件可以为您提供已翻译的密钥。将键转换为字符是一个复杂的有状态过程(死键、IME 等),没有从键到字符的简单映射。 -
实际上,答案似乎是否定的,至少对于 KeyDown 和 OnKeyDown 事件。 event.ToString() 输出事件的名称, event.Key.ToString() / event.VirtualKey.ToString() 输出在 VirtualKey 枚举中定义的 int - 没有给出输入的字符。令人讨厌的是,显然其他键盘布局在应用程序中与 TextBoxes 和其他控件一起使用,但是制作自定义控件时,我不能轻易吐出为非美国键盘布局输入的内容!
-
KeyDown没有这个并不奇怪。令我惊讶的是缺少KeyPress/WM_CHAR。 -
我认为我的解决方案不错。没有?
-
不是。差远了。它没有解决许多非美国键盘布局,其中包括不是 A-Z 的字符,这是问题的全部重点。
标签: c# microsoft-metro windows-runtime windows-store-apps