更新[2014年7月16日]:该问题在技术上不正确。阅读答案以获取更多详细信息。
我试图在到达文本框之前捕获文本。我发现了以下事实:
KeyDown
,KeyUp
事件会告诉您virtualKey
按下的不是角色!
CoreWindow.CharacterReceived
将捕获字符,但是此
事件不特定于TextBox,并且
在到达文本框后会告诉您字符。
现在我的问题是:
谁能告诉我如何捕获Windows Phone 8.1上的Swype键盘事件?
注意:
1-我试图在TextBox.Paste中捕获它,但是它失败了:(
2-事件textBox.textChanged()
是不是我期待的BEC该事件火灾键盘完成,此事件(框TextChanged)会后火灾发生后keyDown
,keyUp
,CharacterReceived
无论文本是如何输入。
好!我已经在这个问题上待了几天,并对其进行了广泛的测试,以了解并得出以下结论:
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";
假设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] 删除。
我来说两句