4

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

我试过使用 osk.exe 和 tabtip.exe,但都缺乏对大小、位置等的支持。此外,您必须覆盖文本框上的很多事件,以处理打开和关闭键盘(当用户离开文本框)等等。所有这些都是为了避免常见问题,例如,键盘滑入文本框顶部,因此您无法看到您正在输入的内容。

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

所以我的问题是;是否有在 Windows 8 平板电脑上处理用户文本输入的标准化方法?还是微软只是“把你留在黑暗中”?每个人都做什么?像现在这样创建一些非常糟糕且不专业的 WPF 解决方案非常容易。

谢谢。

4

1 回答 1

3

我刚刚完成了一个触摸屏信息亭的开发,没有物理键盘。我也发现 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
}
于 2013-07-25T15:23:46.220 回答