我开发了一个应用程序,只要用户输入用户名和密码并继续显示一个对话框,其中包含一系列按钮供用户选择。由于有登录屏幕,因此会显示键盘。我已经连接到Enter按钮,这与点击登录按钮相同 - 这就是我遇到问题的地方。
如果在键盘处于活动状态时显示对话框,则对话框内容大小不是全屏(尽管键盘消失)。但如果点击登录按钮(即键盘未激活),一切都很好。
下面的图片可能更好地解释了事情。
我不知道如何解决这个问题 - 任何想法?
仅供参考 - 我可以滚动按钮,但只能在屏幕的顶部显示。
答案 0 :(得分:1)
一如既往 - 我问一个问题,然后找到答案。
当我抓住“Enter button tapped”事件时,我将焦点设置到页面上。这有点像黑客,因为我宁愿知道为什么会发生这个问题并完全停止它,而不仅仅是处理它,但它有效......
this.Focus(FocusState.Keyboard);// this is the line that solves it.
完整代码:
private void tbPassword_KeyUp(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
this.Focus(FocusState.Keyboard);
StartLogin();
}
}
答案 1 :(得分:0)
@Rick有一个好方法。但我有其他好方法可以让键盘显示,UWP可以安排UI。
您可以使用InputPane.GetForCurrentView().TryHide()
隐藏keyBoard并使用InputPane.GetForCurrentView().TryShow()
来显示keyBoard。因此,当您想要显示ContentDialog时,可以隐藏它。
但我认为这不是一个好方法。
您可以使用InputPane.GetForCurrentView().Showing
了解keyBoard的显示时间,并使用InputPane.GetForCurrentView().Hiding
了解何时隐藏keyBoard。
首先,你可以在显示keyBoard时使用一行显示keyBoard,它将获得Hight。
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition x:Name="HightKeyboard" Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
当显示keyBoard时,您可以使用e.OccludedRect.Height
获取keyBoard的高度。
InputPane.GetForCurrentView().Showing += (s, e) =>
{
HightKeyboard.Height=new GridLength(e.OccludedRect.Height);
};
当隐藏keyBoard时,你应该隐藏行高。
InputPane.GetForCurrentView().Hiding += (s, e) =>
{
HightKeyboard.Height=new GridLength(1);
};
您可以在第一行显示用户界面,当keyBoard显示上面的高度时,将会安排。