Windows Phone 8.1 swype键盘事件捕获

堆栈下溢

更新[2014年7月16日]:该问题在技术上不正确。阅读答案以获取更多详细信息。


我试图在到达文本框之前捕获文本。我发现了以下事实:

  • KeyDownKeyUp事件会告诉您virtualKey按下的不是角色!

  • CoreWindow.CharacterReceived将捕获字符,但是此
    事件不特定于TextBox,并且
    在到达文本框后会告诉您字符

现在我的问题是:

谁能告诉我如何捕获Windows Phone 8.1上的Swype键盘事件? 在此处输入图片说明

注意:

1-我试图在TextBox.Paste中捕获它,但是它失败了:(

2-事件textBox.textChanged()是不是我期待的BEC该事件火灾键盘完成,此事件(框TextChanged)会后火灾发生后keyDownkeyUpCharacterReceived无论文本是如何输入。

堆栈下溢

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

1-键盘的输入由名为(CharacterRecieved的页面的事件处理该事件被Page触发并捕获,然后发送到TextBox,将导致TextChanged事件的触发

2-如果您以winForms的心态来到winRT和Windows Phone,您肯定会感到困惑,并且需要花一些时间来解决它(除非您阅读此答案,否则会更短)。

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

4-通过键盘输入一个字母与使用swype键盘输入一个单词之间的区别:

**

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

**

假设 textBox.Text = "99";

现在,我将按数字7:

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

  • 而在使用swype-键盘的情况下:

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

swype会在单词之前添加空格,因此会变成“ 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"直到两次迭代结束时,屏幕上仍未显示,但仍未显示textChanged事件。

有了这个,我们注意到了swype和普通键盘按键事件之间的区别,即swype中根本没有keyDown keyUp事件!

现在,如果您了解每种键盘输入方法(swype / non-swype)的场景,则可以根据需要计划验证和应用程序行为。只要您知道它与旧版Windows系统输入完全不同。

我希望这会帮助那里的某人并挽救他/她许多小时的困惑和痛苦:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章