软键盘重叠TextBoxes并使它们无法访问

时间:2014-12-04 15:01:50

标签: c# xaml keyboard windows-phone-8.1 scrollviewer

当输入字段与软键盘重叠时,如何在ScrollViewer中到达输入字段?

这种情况很容易复制:

  1. 使用包含一些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>
    
  2. 启动应用并点按&#34;占位符3&#34;。键盘弹出并重叠&#34; Paceholder 2&#34;和&#34;占位符1&#34;。

  3. 如何改进布局,以便我可以在不关闭和重新打开键盘的情况下到达这些TextBox(&#34; 1&#34;和#34; 2&#34;)?

    可以在每个WindowsPhone上找到显示工作解决方案的示例:Settings =&gt; VPN =&gt;启用VPN =&gt;添加新个人资料=&gt;单击任何TextBox,您将看到虽然软键盘已启动,但您可以滚动到布局的每个部分。

2 个答案:

答案 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}}在布局中从根视觉中移位时,我也遇到了这个问题。这可能是由包装器元素上的BottomAppBarMargin引起的。

破碎的视觉树:

  • Padding Window.Current.Content
    • Frame 1px Border
      • Margin
        • ContentPresenterPage

我找不到“非恶心”的解决方法,但直接在根BottomAppBar上调整偏移确实对我有用。有关完整复制和解决方法,请参阅UWPMobileScrollIssue

ScrollViewer