C# 在WPF中处理密钥的正确且独立于文化的方法是什么?

C# 在WPF中处理密钥的正确且独立于文化的方法是什么?,c#,wpf,keyboard,C#,Wpf,Keyboard,我对KeyEventArgs中的密钥处理非常困惑。 例如:我想处理冒号键(在我的意大利键盘上用点+移位键制作),所以我写了如下代码 if ( e.Key == Key.OemPeriod && e.KeyboardDevice.Modifiers == ModifierKeys.Shift) { // Code } 但这种方法是不正确的,因为它只能使用意大利键盘。处理WPF中的键的正确且独立于区域性的方法是什么?您是否尝试过处理or事件?这些事件应该为您提供输入的文本

我对KeyEventArgs中的密钥处理非常困惑。
例如:我想处理冒号键(在我的意大利键盘上用点+移位键制作),所以我写了如下代码

if ( e.Key == Key.OemPeriod && e.KeyboardDevice.Modifiers == ModifierKeys.Shift) {
    // Code 
}

但这种方法是不正确的,因为它只能使用意大利键盘。处理WPF中的键的正确且独立于区域性的方法是什么?

您是否尝试过处理or事件?这些事件应该为您提供输入的文本(与设备无关),而不是按下的物理键(与设备相关)。

实际上,这是一个好问题。WPF中没有类似于
KeyPress
,因此我怀疑解决方案不会如此简单。此外,如果您能为您的问题提供更多的上下文,我们可能可以更容易地提出建议。PreviewTestInput和TextInput提供正确的信息。当我完成测试时,TextInput事件被困在其他地方,无法到达我的控制,但PreviewTestInput工作正常。谢谢,我的问题不仅仅是如何从文本框中获取字符。更普遍的问题是如何正确地将键盘事件转换为字符表示。因为我在键盘处理基础结构中发现了一种非常奇怪的文化限制。这些事件只是底层Windows消息的WPF包装。在WinForms、VB、MFC、WinAPI等中获得相同的事件序列,只是事件/消息名称不同。Windows一直都是这样工作的。