在Win 8平板电脑上的WPF应用程序中的屏幕键盘

时间:2013-06-03 14:45:00

标签: wpf windows-8 keyboard

我正在开发一个应该在Windows 8平板电脑上运行的WPF应用程序。 说到文本框,我很难找到让用户在这些文本框中输入文本的正确方法。

我曾尝试使用osk.exe和tabtip.exe,但两者都缺乏对大小,位置等的支持。而且,你必须在文本框上覆盖相当多的事件,以便打开和关闭键盘(当用户离开文本框时)等等。所有这些都是为了避免常见问题,例如,键盘在文本框顶部滑动,这样您就无法看到正在键入的内容。

我想念的是Windows 8屏幕键盘支持,所以我可以打开一个键盘,有不同的选项可供选择。

所以我的问题是;有没有一种标准的方法来处理Windows 8平板电脑上的用户文本输入?或者微软只是“让你陷入黑暗”?每个人都做什么? 以现在的方式创建一个非常糟糕且不浪费的WPF解决方案非常容易。

感谢。

1 个答案:

答案 0 :(得分:2)

我刚刚开发了一个触摸屏Kiosk,没有物理键盘。我也发现了osk限制。

在图形设计师的帮助下,我们创建了自己的键盘,带有键背景的按钮,以及与按钮意图相匹配的内容(或标签)。将大多数按钮分配给公共事件处理程序,该处理程序将文本插入所选控件的CaretIndex。

对DEL和ENTER使用单独的处理程序。

对于我的应用程序,我弹出一个带有文本框,所需键盘(字母,数字,两者等)的新窗口,一个提示用户输入的有用句子和一个显示所需格式的占位符。

效果非常好,让我们可以完全控制用户体验。

private void key_Click(object sender, RoutedEventArgs e)
{
    _activeControl.SelectedText = (string)((Control)sender).Tag;
    _activeControl.CaretIndex += _activeControl.SelectedText.Length;
    _activeControl.SelectionLength = 0;
    _activeControl.Focus();
}
private void btnDEL_Click(object sender, RoutedEventArgs e)
{
    var ci = _activeControl.CaretIndex;
    if (ci > 1)
    {
        _activeControl.Text = _activeControl.Text.Remove(
                                     _activeControl.CaretIndex - 1, 1);
        _activeControl.SelectionStart = ci - 1;
    }
    else if (_activeControl.Text.Length > 0)
    {
        _activeControl.Text = _activeControl.Text.Remove(0, 1);
    }
    _activeControl.Focus();
}
private void btnEnter_Click(object sender, RoutedEventArgs e)
{
    // Raise an event here, signalling your application 
    // to validate and move to the next field
}