3

我有一个 Windows 商店应用程序,它要求用户通过大量文本框输入数据。

当屏幕底部附近的文本框获得焦点时,屏幕键盘会出现并将页面内容向上移动。这很棒,也是我想要的。

当我有一个弹出窗口时会出现我的问题。当我的弹出窗口出现时,它实际上是全屏的。弹出窗口的子窗口是一个用户控件,上面有很多文本框。选择页面底部附近的一个文本框后,将出现键盘,但屏幕不会向上移动,以便键盘出现在所选文本框中。

这是我用来显示弹出窗口的代码:

if (myPopup == null)
{
    myPopup = new Popup();

    myPopup.Child = new PopupFrom();

    // open the Popup                
    myPopup.IsOpen = true;
}

当布局更新时,我还手动调整弹出窗口的大小

private void popup_LayoutUpdated(object sender, object e)
{
    if (Windows.UI.ViewManagement.ApplicationView.Value == Windows.UI.ViewManagement.ApplicationViewState.FullScreenLandscape)
    {
        popup.Width = 1280;
        popup.Height = 680;
    }
    else
    {
        popup.Width = 680;
        popup.Height = 1280;
    }
}

所以我的问题是,当显示键盘并与弹出窗口底部附近的一个文本框重叠时,如何向上移动弹出窗口?

提前致谢。

我正在使用 C# & XAML 编写这个 Windows 8 商店应用程序。

4

2 回答 2

4

在我的应用程序中,我收听InputPane显示/隐藏事件。这些事件告诉您键盘或其他输入设备何时显示/隐藏:

var pane = InputPane.GetForCurrentView();
pane.Showing += pane_Showing;
pane.Hiding += pane_Hiding;

在您的事件处理程序中,您可以使用该OccludedRect属性来确定输入区域(例如键盘)的大小。然后你可以移动你的弹出窗口,使它不覆盖这个矩形。

于 2013-03-12T17:21:28.873 回答
0

您需要收听重叠文本框的gotFocus事件才能修改弹出窗口的子尺寸。另外,我建议使用ScrollViewer作为弹出窗口的子项,以允许滚动到上面的内容。比如:emailBox.GotFocus += (s, o) => AdjustPopup();祝你好运!

于 2013-03-12T12:31:22.430 回答