【问题标题】:windows phone 8.1 swype keyboard event capturewindows phone 8.1 swype 键盘事件捕获
【发布时间】:2014-07-12 13:14:55
【问题描述】:

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


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

  • KeyDown, KeyUp 事件会告诉你按下了什么virtualKey 不是角色!!

  • CoreWindow.CharacterReceived 会捕获角色,但是这个
    事件并非特定于 TextBox,它会告诉您字符
    到达文本框后。

现在我的问题是:

谁能告诉我如何在 windows phone 8.1 上捕获 Swype 键盘的事件?

请注意:

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

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

【问题讨论】:

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


    【解决方案1】:

    好的!我已经研究这个问题好几天了,并对其进行了广泛的测试以理解并得出以下结论:

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

    2- 如果您带着 winForms 的心态来使用 winRT 和 windows phone,您肯定会遇到我的困惑,并且需要一些时间来弄清楚 [除非您阅读了这个答案,这会使其更短]。

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

    4- 键盘输入一个字母和swype键盘输入一个单词的区别:

    **

    • 在手机键盘输入一个字母的情况下, 以下顺序很可能会发生:

    **

    假设textBox.Text = "99";

    现在我按数字 7:

    1- KeyDown 事件将触发:在这里您可以捕获 virtualKey 但您将无法知道该字符,因此按“a”字母您无法知道它是“A”大写还是'一个小的。 还是textBox.Text = "99";
    2-CharacterRecieved火; textBox.Text = "997";
    3- KeyUp 事件触发; textBox.Text = "997";
    4-textChanged火。 textBox.Text = "997";

    • 如果是 swype 键盘:

    假设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 系统输入完全不同。

    我希望这将帮助那里的人,并为他/她节省数小时的困惑和痛苦:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多