更新[2014年7月16日]:问题在技术上是不正确的。阅读答案以获取更多详细信息。
我试图在到达我的文本框之前捕获文本。我发现了以下事实:
KeyDown
,KeyUp
事件将告诉您virtualKey
被按下了什么
不是人物!!
CoreWindow.CharacterReceived
会抓住这个角色但是这个
事件不是特定于TextBox,它会告诉你字符
在它到达textBox之后。
现在我的问题是:
任何人都可以告诉我如何在Windows Phone 8.1上捕获Swype键盘的事件?
请注意:
1-我试图在TextBox.Paste中捕获它但它失败了:(
2-事件textBox.textChanged()
不是我想要的,因为在键盘完成后事件触发并且此事件(textChanged)将在keyDown
,keyUp
之后触发,{ {1}}无论文本是如何输入的。
答案 0 :(得分:4)
OK!我已经在这个问题上待了好几天,并对它进行了广泛的测试,以便了解并得出以下结论:
1-来自键盘的输入由名为(CharacterRecieved
)的页面事件处理。该事件被页面触发并捕获,然后发送到TextBox
,并将导致TextChanged
事件被触发。
2-如果你带着winForms心态来到winRT和windows手机,你肯定会有我的困惑,并且需要一些时间来弄明白[除非你读到这个会让它更短的答案]。
3-不要指望[我错误地预期]输入的字符的事件将在TextBox中触发。它将在页面上触发(CoreWindow),然后更改textBox的文本值,因此您必须在页面级别而不是在控件级别上捕获事件。
4-通过键盘输入一个字母和使用swype键盘输入一个单词之间的区别:
**
**
假设textBox.Text = "99";
现在我将按数字7:
1- KeyDown
事件将会触发:在这里你可以捕获virtualKey
,但你将无法知道这个角色,所以按下你不知道的'a'字母就是' '资本'或'小'。
仍textBox.Text = "99";
2- CharacterRecieved
火; textBox.Text = "997";
3 KeyUp
事件火灾; textBox.Text = "997";
4- textChanged
火。 textBox.Text = "997";
假设textBox.Text = "99";
我想输入文字“你好”;
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系统输入完全不同。
我希望这会帮助那里的某人并为他/她节省许多时间的困惑和痛苦:)