我有一个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商店应用程序。
答案 0 :(得分:4)
在我的应用中,我会收听InputPane显示/隐藏事件。这些事件会告诉您何时显示/隐藏键盘或其他输入设备:
var pane = InputPane.GetForCurrentView();
pane.Showing += pane_Showing;
pane.Hiding += pane_Hiding;
在事件处理程序中,您可以使用OccludedRect
属性来确定输入区域(例如键盘)的大小。然后你可以移动弹出窗口,使其不覆盖这个矩形。
答案 1 :(得分:0)
您需要为重叠的文本框收听 gotFocus 事件,以便修改弹出窗口的子维度。此外,我建议使用 ScrollViewer 作为弹出窗口的子项,以允许滚动到上面的内容。
像:emailBox.GotFocus += (s, o) => AdjustPopup();
祝你好运!