我们有一个WPF应用程序,我们需要检测用户是否正在键入可以出现在文本框中的内容。 WinForms曾经有一个不错的OnKeyPressed覆盖,它与OnKeyDown的不同之处在于它仅在键入可打印字符时被调用(例如,它在'A'和'a'之间区分,而不是在顶行的'1'和数字小键盘。它也忽略了'Shift'等键。)我们需要在WPF中复制该功能。
现在我知道我可以覆盖OnKeyDown并检查密钥代码,但这意味着手动测试每个可能导致文本框中出现某些内容的密钥。这似乎是我发现的其他类似SO问题的共识,但我简直无法相信这些基本的东西会被遗漏掉。
除了怪物if-tree之外,一个'hacky'解决方案是使用内存中的文本框,将密钥代码传递给它,然后检查文本是否有长度。但即使输入可能的解决方案,我也会感到恶心!啊!!我觉得很脏!
那么......用什么方法判断用户是否按下了一个或多个会导致可打印字符的键的方法是什么?
TIA,
标记
答案 0 :(得分:3)
实际上,我认为我刚刚发现它,所以我发布了其他人的答案。您根本不使用任何“关键”事件。 WPF更清楚地将那些与文本价值区分开来。因此,您可以覆盖OnPreviewTextInput
和/或OnTextInput
函数。要获取实际输入的内容,请检查事件args上的.Text
属性,该属性返回一个简单的字符串。
完成并完成!
希望这有助于他人!一直把我推到墙上!