软键盘的UWP XAML Windows Phone对话框问题

时间:2017-03-24 11:37:32

标签: xaml uwp windows-10-mobile

我开发了一个应用程序,只要用户输入用户名和密码并继续显示一个对话框,其中包含一系列按钮供用户选择。由于有登录屏幕,因此会显示键盘。我已经连接到Enter按钮,这与点击登录按钮相同 - 这就是我遇到问题的地方。

如果在键盘处于活动状态时显示对话框,则对话框内容大小不是全屏(尽管键盘消失)。但如果点击登录按钮(即键盘未激活),一切都很好。

下面的图片可能更好地解释了事情。

Issue example

我不知道如何解决这个问题 - 任何想法?

仅供参考 - 我可以滚动按钮,但只能在屏幕的顶部显示。

2 个答案:

答案 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显示上面的高度时,将会安排。