【发布时间】:2026-02-09 17:35:01
【问题描述】:
我使用 XAML 和 C# (ofc) 在我的 WPF 应用程序中制作了一个功能齐全的触摸键盘。目前,键盘上按下的每个键都会在文本框中注册相应的键;但是,如果用户触摸 TextBox(这是受欢迎的......我不想阻止它)将光标定位在 TextBox 的更早位置以修复他们可能键入的错误 AND THEN 与键交互(如预期的那样),他们请求的位置没有注册,最后继续输入键。
例如,用户类型(注意 | 充当光标)::
Justin is awesome, bt that is because it is his birthday.|
用户发现单词“but”拼写为“bt”有错误,因此决定触摸屏幕将光标定位在 b 和 t 之间,如下所示:
Justin is awesome, b|t that is because it is his birthday.
然后用户希望 touch U 在键盘上,然后在光标所在的位置输入它......不幸的是(目前)它最终是这样的:
Justin is awesome, bt that is because it is his birthday.U|
如果我启用鼠标,同样的事情会发生(所以它可能不是触摸独有的)。如果我在触摸一个位置后插入键盘,我可以用所说的插入键盘打字没有问题。
实现的触摸键盘无法正确读取位置。查看this,操作似乎无处可去,因为Cursor Position 从TextBox 变为Button(键盘键)。
这是一个sn-p代码供任何人测试(显然不能提供全键盘):
XAML
<Grid>
<TextBox x:Name="txtBox" />
<Button x:Name="btnQ" Content="q" Click="btnQ_Click"/>
<Button x:Name="btnW" Content="w" Click="btnW_Click"/>
</Grid>
C#
private bool numberHitSinceLastOperator = false;
private void HandleKeyboard(string key)
{
//Ternary operator
string valueSoFar = numberHitSinceLastOperator ? txtBox.Text : "";
string newValue = valueSoFar + key.ToString();
txtBox.Text = newValue;
numberHitSinceLastOperator = true;
}
private void btnQ_Click(object sender, RoutedEventArgs e)
{
HandleKeyboard("Q");
}
private void btnW_Click(object sender, RoutedEventArgs e)
{
HandleKeyboard("W");
}
【问题讨论】:
-
不是您问题的真正答案,但您可以将SurfaceSDK(最初为 Surface 和 Pixelsense 设计)用于支持触控的 UI 组件。我在广泛的项目中使用它们,它们可以在所有不同类型的带有默认 WPF 的触摸屏上工作。
-
@StevenHouben 感谢您的建议!我查看了 SDK,如果遇到其他问题,我会考虑使用它。 :)