我正在开发一个应该在Windows 8平板电脑上运行的WPF应用程序。 说到文本框,我很难找到让用户在这些文本框中输入文本的正确方法。
我曾尝试使用osk.exe和tabtip.exe,但两者都缺乏对大小,位置等的支持。而且,你必须在文本框上覆盖相当多的事件,以便打开和关闭键盘(当用户离开文本框时)等等。所有这些都是为了避免常见问题,例如,键盘在文本框顶部滑动,这样您就无法看到正在键入的内容。
我想念的是Windows 8屏幕键盘支持,所以我可以打开一个键盘,有不同的选项可供选择。
所以我的问题是;有没有一种标准的方法来处理Windows 8平板电脑上的用户文本输入?或者微软只是“让你陷入黑暗”?每个人都做什么? 以现在的方式创建一个非常糟糕且不浪费的WPF解决方案非常容易。
感谢。
答案 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
}