在Windows 8商店应用程序中显示Surface键盘时,弹出窗口不会向上移动

我有一个Windowsapp store应用程序,要求用户通过多个文本框输入数据。

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

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

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

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商店应用程序。

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

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

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

您需要为重叠的文本框监听gotFocus事件,以便修改弹出窗口的子维度。 此外,我建议使用ScrollViewer作为弹出窗口的子项,以允许滚动到上面的内容。 类似于: emailBox.GotFocus += (s, o) => AdjustPopup(); 祝好运!