windows phone 8.1 swype键盘事件捕获

时间:2014-07-12 13:14:56

标签: c# character winrt-xaml windows-phone-8.1 keyboard-events

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


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

  • KeyDownKeyUp事件将告诉您virtualKey被按下了什么 不是人物!!

  • CoreWindow.CharacterReceived会抓住这个角色但是这个 事件不是特定于TextBox,它会告诉你字符
    在它到达textBox之后。

现在我的问题是:

任何人都可以告诉我如何在Windows Phone 8.1上捕获Swype键盘的事件? enter image description here

请注意:

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

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

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";

  • ,而在swype-keyboard的情况下:

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

swype会在单词之前添加空格,因此它将是“hello”

,事件顺序如下:

1-字符串“hello”中每个字符的循环将触发事件CharacterRecievedtextBox.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系统输入完全不同。

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