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

4
我正在开发一款 WPF 应用程序,该应用程序应在 Windows 8 平板电脑上运行。在文本框方面,我很难找到让用户在这些文本框中输入文本的正确方法。
我尝试使用 osk.exe 和 tabtip.exe,但是两者都缺乏大小、位置等支持。而且,您必须覆盖文本框上的相当多的事件,以处理打开和关闭键盘(当用户离开文本框时)等问题。所有这些都是为了避免常见的问题,例如键盘滑动到文本框的顶部,因此您无法看到自己输入什么。
我想要更多的Windows 8屏幕键盘支持,以便我可以打开具有不同选项可选择的键盘。
所以我的问题是:处理Windows 8平板电脑上的用户文本输入是否有标准化的方法?或者Microsoft只是“让你处于黑暗中”?每个人都在做什么?
现在的方式很容易创建一些相当糟糕和不专业的WPF解决方案。
谢谢。

虽然不是直接答案,但这可能会有所帮助 - 如何在Windows 7平板电脑设备上使用C++调出屏幕键盘 - Sevenate
1个回答

3
我刚完成了一个没有实体键盘的触摸屏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
}

感谢您的贡献。 我并没有选择自己开发键盘,而是接受了osk.exe的限制。 不过你的解决方案看起来很不错! - Farsen
如果你认为我值得,点个赞吧。 - B2K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接