编程语言
首页 > 编程语言> > c# – 软键盘重叠TextBoxes并使它们无法访问

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

作者:互联网

当输入字段与软键盘重叠时,如何在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>

>启动应用程序并点击“占位符3”.键盘弹出并重叠“Paceholder 2”和“Placeholder 1”.

如何改进布局以便我可以在不关闭和重新打开键盘的情况下到达这些TextBox(“1”和“2”)?

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

解决方法:

在这个问题上已经有一段时间,但对于那些可能正在寻找一个好解决方案的人来说,这就是我所做的.

订阅键盘节目并隐藏事件并根据键盘显示或隐藏的时间调整滚动查看器的高度.

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;
}

根据您正在使用的容器的高度,可能有更好的方法来调整高度,但这是我用来使应用程序工作的方法.

标签:c,keyboard,xaml,windows-phone-8-1,scrollviewer
来源: https://codeday.me/bug/20190628/1319369.html