Windows Phone 8.1 Swype键盘事件捕获

6
更新 [2014年7月16日]:这个问题在技术上是不正确的。阅读答案以获取更多详细信息。
我尝试在到达文本框之前捕获文本,然后发现以下事实:
- KeyDown、KeyUp事件将告诉您按下了哪个虚拟键,而不是字符! - CoreWindow.CharacterReceived将捕获字符,但此事件不特定于TextBox,并且会在到达TextBox之后告诉您字符。
现在我的问题是:
有人能告诉我如何在Windows Phone 8.1上捕获Swype键盘的事件吗?
请注意:
1. 我尝试在TextBox.Paste中捕获它,但失败了:(
2. textBox.textChanged()事件不是我要找的事件,因为该事件在键盘完成后触发,而且无论如何输入文本,该事件(textChanged)都会在keyDown、keyUp、CharacterReceived之后触发。
1个回答

4

好的!我已经在这个问题上纠结了几天,进行了广泛的测试以理解并得出以下结论:

1- 键盘输入由页面事件(CharacterRecieved)处理。事件被触发并被页面捕获,然后发送到TextBox,最终导致TextChanged事件的触发。

2- 如果您以winForms的思维方式来处理winRT和Windows Phone,那么您肯定会像我一样感到困惑,并需要一些时间来弄清楚它 [除非您阅读了这个答案,这将缩短时间]。

3- 不要期望(就像我错误地期望的那样)输入字符的事件将在TextBox上触发。它将在页面(CoreWindow)上触发,然后更改textBox的文本值,因此您必须在页面级别而不是控件级别上捕获事件。

4- 通过键盘输入一个字母和使用滑动输入法输入一个单词之间的区别:

**

  • 在手机键盘上输入一个字母的情况下,最可能会发生以下序列:

**

假设textBox.Text =“99”;

现在我要按数字7:

1- 触发KeyDown事件:在这里,您可以捕获virtualKey,但无法知道字符,因此按下字母'a'时,您无法知道它是'A'大写还是'a'小写。 仍然是textBox.Text =“99”;
2- 触发CharacterRecieved事件;textBox.Text =“997”;
3- 触发KeyUp事件;textBox.Text =“997”;
4- 触发textChanged事件;textBox.Text =“997”;

  • 而在滑动输入法的情况下:

假设textBox.Text =“99”; 我想输入文本“hello”;

滑动输入法将在单词前添加空格,因此它将变为“ hello”

事件序列如下:

1- 对于字符串“ hello”中的每个字符,都会触发事件CharacterRecieved,并且在第一次迭代中,textBox.Text值将为textBox.Text=“99 ”; 然后从第二次迭代开始,textBox.Text =“99 hello”; 在每次迭代中,您都可以捕获key code [char],在这种情况下为(32, 110, 101, 108, 108, 111)。请注意,到目前为止,textBox.Text的值已更改,但尚未显示在屏幕上!!

2-textChanged事件会触发两次(很奇怪!我认为一次是因为空格,第二次是因为单词“hello”),此外,现在textBox.Text = "99 hello"但仍未显示在屏幕上,直到两次迭代结束后才会显示。

由此我们注意到了Swype和普通键盘按键事件之间的差异,其中Swype根本没有keyDownkeyUp事件!!

现在,如果您知道每种键盘输入方法(Swype /非Swype)的情况,您可以根据自己的意愿规划验证和应用程序行为。只要您知道它与传统的Windows系统输入完全不同。

我希望这能帮助某个人,并节省他/她许多困惑和痛苦 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接