当 WinRT 页面显示屏幕键盘时调整大小

3
我有一个运行在Windows 8.1系统上的C#应用程序,该应用程序显示一个很大的文本框(几乎覆盖了整个页面;这是一款写作应用程序)。
当屏幕键盘弹出时,它会遮挡文本框的一半。我想调整文本框(或者整个页面)的大小,以便键盘不会遮挡住它。
我现在正在尝试使用静态InputPane并订阅其显示和隐藏事件来实现这一目标。然后,我尝试使用事件参数中提供的被遮挡矩形来更改我的文本框的边距。这种方法是可行的,但由于我的页面仍然是屏幕高度,因此它会将页面滚动到屏幕底部的一半处。
public MainPage()
{
    var inputPane = InputPane.GetForCurrentView();
    inputPane.Showing += this.InputPaneShowing;
    inputPane.Hiding += this.InputPaneHiding;
}

void InputPaneHiding(InputPane sender, InputPaneVisibilityEventArgs args)
{
    this.EditBox.Margin = new Thickness();
}

private void InputPaneShowing(InputPane sender, InputPaneVisibilityEventArgs args)
{
    this.EditBox.Margin = new Thickness(0, 0, 0, args.OccludedRect.Height);
}

在尝试这个时,我感觉这不是最理想的解决方案,但我没有更好的想法。理想情况下,我认为它应该像垂直分割一样,当您打开两个应用程序时,但是键盘位于底部,应用程序仅可用大小在键盘上方。

有任何想法这是否可能?


1
你尝试过设置页面的Margin或直接设置其高度吗? - Rafael
是的@Rafael,我尝试了“Margin”,但它导致了一些奇怪的行为,它仍然会像原来的大小一样滚动我的页面,这导致一个黑色空间出现在我的(白色)页面停止的地方。(不知道是否清楚,在写作中很难解释 :))。现在我正在尝试高度! - Raf
嗯,当设置页面高度时,它似乎没有任何反应。我还发现在用计算出的值设置高度之前,高度是NaN(设置后仍然是NaN)。这正常吗? - Raf
嗯...奇怪,我无法测试这个,因为我手头没有触摸屏电脑 :-S。 - Rafael
嗨@Rafael,我也在模拟器中尝试这个。我这里也有一个触摸设备,但它给出的结果是相同的... - Raf
1个回答

6

由于您自己处理界面遮挡,因此应将InputPane.Showing eventargs的EnsuredFocusedElementInView属性设置为true。这将防止界面自动滚动。

 private void InputPaneShowing(InputPane sender, InputPaneVisibilityEventArgs args)
 {
    args.EnsuredFocusedElementInView = true;
    this.EditBox.Margin = new Thickness(0, 0, 0, args.OccludedRect.Height);
 };

谢谢,@Cyprien-Autexier,今晚回家后我会尝试这个! - Raf
太棒了@Cyprien,非常有效!我现在将页面的边距(而非EditBox)设置好了,这使得我的整个应用程序占据了键盘上方的剩余空间,看起来非常完美! - Raf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接