windows phone 8.1 swype键盘事件捕获

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


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

  • KeyDownKeyUp事件会告诉你什么是virtualKey被按下而不是字符!!

  • CoreWindow.CharacterReceived将捕获角色但是这个
    事件不是特定于TextBox的,它会告诉你角色
    在它到达textBox之后。

现在我的问题是:

任何人都可以告诉我如何在Windows Phone 8.1上捕获Swype键盘的事件? 在此处输入图像描述

请注意:

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

2-事件textBox.textChanged()不是我想要的,因为键盘完成后事件触发,并且此事件(textChanged)将在keyDownkeyUpCharacterReceived之后触发,无论文本是如何输入的。

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

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

2-如果你使用winForms心态来winRT和Windows手机,你肯定会有我的困惑,并且需要一些时间才能弄明白[除非你读到这个会让它缩短的答案]。

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

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

**

  • 如果手机上的键盘输入了一个字母,则可能会发生以下顺序:

**

假设textBox.Text = "99";

现在我将按7号:

1- KeyDown事件将触发:在这里你可以捕获virtualKey但你将无法知道该字符,所以按’a’字母你不知道它是’A’大写还是’a’小。 仍然是textBox.Text = "99";
2- CharacterRecieved Fire; textBox.Text = "997";
3- KeyUp事件火灾; textBox.Text = "997";
4- textChanged fire。; textBox.Text = "997";

  • 而在swype键盘的情况下:

假设textBox.Text = "99"; 我想输入文字“你好”;

swype会在单词前加上空格,这样就会“你好”

事件顺序如下:

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)的方案,您可以根据需要规划validation和应用程序行为。 只要您知道它与传统的Windows系统输入完全不同。

我希望这会帮助那里的人并为他/她节省很多时间的困惑和痛苦:)