我目前正在使用 WPF 和 WIN8表模式设计一些软件。
有些地方需要输入一些数字使用文本框。
我用某种方式最终显示键盘:http://brianlagunas.com/showing-windows-8-touch-keyboard-wpf/
但我发现,有时键盘在显示后会覆盖底部或中间的某个项目。
例如:我在屏幕上有5个文本框
<Grid>
<TextBox HorizontalAlignment="Left" Margin="500,95,0,0" Height="23" Width="120"/>
<TextBox HorizontalAlignment="Left" Margin="500,295,0,0" Height="23" Width="120"/>
<TextBox HorizontalAlignment="Left" Margin="500,495,0,0" Height="23" Width="120"/>
<TextBox HorizontalAlignment="Left" Margin="500,695,0,0" Height="23" Width="120"/>
<TextBox HorizontalAlignment="Left" Margin="500,800,0,0" Height="23" Width="120"/>
</Grid>
但现在我发现键盘是否专注于某些不在顶部的文本框,可能在中间或者在底部。键盘将覆盖它。 我甚至看不到我输入的内容。(如图片所示)
那么有什么好方法可以修复它吗?谢谢。
PS:我试图拖动键盘,但看起来这不是一个好的解决方案, 因为某些文本框位于中间,键盘仍将覆盖中间的哪个文本框。
答案 0 :(得分:3)
用户可以移动键盘,使其无法覆盖。最好让用户以这种方式处理这种情况,而不是尝试重新设计Windows体验
答案 1 :(得分:3)
为了使这成为可能,你必须做类似的事情。
1)您的视图必须可滚动(在滚动查看器内)
2)textbox.BringIntoView()通常会正常工作,但是使用当前的解决方案..这是不可能的,因为键盘节目是在textbox.BringIntoView()...
之后调用的。请参阅此主题中的帖子 Show & hiding the Windows 8 on screen keyboard from WPF
这是一个完整的实现,在文本框聚焦时显示/隐藏win 8键盘和自动对焦,并保留使用inkDisableHelper时丢失的所有wpf触摸功能
答案 2 :(得分:0)
虚拟键盘应该在显示键盘时自动将聚焦的TextBox移动到视图中.Microsoft说这种行为是自动的,但可以用EnsuredFocusedElementInView
(example here)覆盖
我认为这可以通过调整Y转换来解决
_offSet = 0;
Windows.UI.ViewManagement.InputPane.GetForCurrentView().Showing += (s, args) =>
{
_offSet = (int)args.OccludedRect.Height;
args.EnsuredFocusedElementInView = true;
var trans = new TranslateTransform();
trans.Y = -_offSet;
this.RenderTransform = trans;
};
Windows.UI.ViewManagement.InputPane.GetForCurrentView().Hiding += (s, args) =>
{
var trans = new TranslateTransform();
trans.Y = 0;
this.RenderTransform = trans;
args.EnsuredFocusedElementInView = false;
};
在构造函数中。
你也可以看看
1)Tips and Tricks for C# Metro developers: Handling the virtual keyboard
2)Popup stays under virtual keyboard in stead of scrolling up with the bottom appbar