当输入字段与软键盘重叠时,如何在ScrollViewer中到达输入字段?
这种情况很容易复制:
使用包含一些TextBox的ScrollViewer创建一个新页面。根据需要制作尽可能多的TextBox,直到您需要滚动页面以到达最后三个TextBox。
<ScrollViewer>
<StackPanel Orientation="Vertical">
<TextBox Margin="20" />
<TextBox Margin="20" />
<TextBox Margin="20" />
..
<TextBox Margin="20" />
<TextBox Margin="20" />
<TextBox Margin="20" PlaceholderText="3" />
<TextBox Margin="20" PlaceholderText="2" />
<TextBox Margin="20" PlaceholderText="1" />
</StackPanel>
</ScrollViewer>
启动应用并点按&#34;占位符3&#34;。键盘弹出并重叠&#34; Paceholder 2&#34;和&#34;占位符1&#34;。
如何改进布局,以便我可以在不关闭和重新打开键盘的情况下到达这些TextBox(&#34; 1&#34;和#34; 2&#34;)?
可以在每个WindowsPhone上找到显示工作解决方案的示例:Settings =&gt; VPN =&gt;启用VPN =&gt;添加新个人资料=&gt;单击任何TextBox,您将看到虽然软键盘已启动,但您可以滚动到布局的每个部分。
答案 0 :(得分:3)
在这个问题上已经有一段时间,但对于那些可能正在寻找一个好解决方案的人来说,就是我所做的。
根据键盘显示或隐藏的时间,订阅键盘节目并隐藏事件并调整滚动查看器的高度。
的Xaml
<ScrollViewer x:Name="scrlvwrKBScroll" VerticalScrollMode="Enabled">
<StackPanel Orientation="Vertical">
<TextBox Margin="20" />
<TextBox Margin="20" />
<TextBox Margin="20" />
..
<TextBox Margin="20" />
<TextBox Margin="20" />
<TextBox Margin="20" PlaceholderText="3" />
<TextBox Margin="20" PlaceholderText="2" />
<TextBox Margin="20" PlaceholderText="1" />
</StackPanel>
</ScrollViewer>
C#
public Constructor()
{
this.InitializeComponent()
InputPane.GetForCurrentView().Showing += Keyboard_OnShow;
InputPane.GetForCurrentView().Hiding += Keyboard_OnHide;
}
private void Keyboard_OnShow(InputPane sender, InputPaneVisibilityEventArgs args)
{
this.scrllvwrKBScroll.Height = this.ActualHeight - args.OccludedRect.Height - 50;
}
private void Keyboard_OnHide(InputPane sender, InputPaneVisibilityEventArgs args)
{
this.scrllvwrKBScroll.height = this.ActualHeight;
}
根据您正在使用的容器的高度,可能有更好的方法来调整高度,但这是我用来使应用程序工作的原因。
答案 1 :(得分:0)
每当带有Page
的{{1}}在布局中从根视觉中移位时,我也遇到了这个问题。这可能是由包装器元素上的BottomAppBar
或Margin
引起的。
破碎的视觉树:
Padding
Window.Current.Content
Frame
1px Border
Margin
ContentPresenter
与Page
我找不到“非恶心”的解决方法,但直接在根BottomAppBar
上调整偏移确实对我有用。有关完整复制和解决方法,请参阅UWPMobileScrollIssue。
ScrollViewer