在WPF中,如何复制旧的WinForms OnKeyPressed功能?

在WPF中,如何复制旧的WinForms OnKeyPressed功能?,wpf,input,keyboard,onkeypress,onkeydown,Wpf,Input,Keyboard,Onkeypress,Onkeydown,我们有一个WPF应用程序,需要在其中检测用户是否正在键入可能出现在文本框中的内容。WinForms过去有一个很好的OnKeyPressed覆盖,它不同于OnKeyDown,因为它只在键入可打印字符时被调用(例如,它在“a”和“a”之间有区别,但在顶行的“1”和数字键盘之间没有区别。它还忽略了“Shift”等键)。我们需要在WPF中复制该功能 现在我知道我可以覆盖OnKeyDown并检查keycode,但这意味着手动测试可能导致文本框中出现某些内容的每个键。这似乎是我发现的其他类似SO问题的共识,

我们有一个WPF应用程序,需要在其中检测用户是否正在键入可能出现在文本框中的内容。WinForms过去有一个很好的OnKeyPressed覆盖,它不同于OnKeyDown,因为它只在键入可打印字符时被调用(例如,它在“a”和“a”之间有区别,但在顶行的“1”和数字键盘之间没有区别。它还忽略了“Shift”等键)。我们需要在WPF中复制该功能

现在我知道我可以覆盖OnKeyDown并检查keycode,但这意味着手动测试可能导致文本框中出现某些内容的每个键。这似乎是我发现的其他类似SO问题的共识,但我无法相信API中会遗漏如此基本的东西

除了monster if树之外,一个“黑客”解决方案是使用内存中的文本框,将键码传递给它,然后检查文本是否有长度。但我觉得恶心,甚至把它作为一种可能的解决办法!啊!!我觉得很脏

所以。。。如果用户按下一个或多个键会产生可打印字符,最简单的方法是什么

蒂亚


马克

事实上,我想我刚刚找到了它,所以我正在为其他人发布答案。您根本不使用任何“关键”事件。WPF更清楚地将这些内容从文本值中分离出来。因此,您可以覆盖
onpreviewtextendeput
和/或
ontextendeput
函数。要获取实际键入的内容,请检查返回简单字符串的事件args上的
.Text
属性

做了,做了

希望这能帮助别人!我快被吓坏了