windows phone 8.1 swype键盘事件捕获
更新[2014年7月16日]:问题在技术上是不正确的。 阅读答案以获取更多详细信息。
我试图在到达我的文本框之前捕获文本。 我发现了以下事实:
-
KeyDown
,KeyUp
事件会告诉你什么是virtualKey
被按下而不是字符!! -
CoreWindow.CharacterReceived
将捕获角色但是这个
事件不是特定于TextBox的,它会告诉你角色
在它到达textBox之后。
现在我的问题是:
任何人都可以告诉我如何在Windows Phone 8.1上捕获Swype键盘的事件?
请注意:
1-我试图在TextBox.Paste中捕获它,但它失败了:(
2-事件textBox.textChanged()
不是我想要的,因为键盘完成后事件触发,并且此事件(textChanged)将在keyDown
, keyUp
, CharacterReceived
之后触发,无论文本是如何输入的。
好! 我已经在这个问题上待了好几天,并对它进行了广泛的测试以了解并得出以下结论:
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系统输入完全不同。
我希望这会帮助那里的人并为他/她节省很多时间的困惑和痛苦:)