【问题标题】:Resize winrt page when on on screen keyboard showing在屏幕键盘上显示时调整 winrt 页面的大小
【发布时间】:2013-12-10 17:11:20
【问题描述】:

我有一个 Windows 8.1 C# 应用程序,它显示一个带有相当大文本框的页面(几乎覆盖了整个页面;它是一个写作应用程序)。

当屏幕键盘出现时,它会覆盖一半的文本框。 我想调整文本框(甚至整个页面)的大小,使其不被键盘覆盖。

我现在正在尝试使用静态 InputPane 并订阅它的显示和隐藏事件来实现这一点。然后,我尝试使用 eventargs 中提供的被遮挡矩形来更改文本框的边距。这可行,但由于我的页面仍然是屏幕的高度,它会将其滚动到底部的一半。

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);
}

在尝试这个时,我觉得这不是理想的解决方案,但我没有更好的主意。理想情况下,我认为当您必须打开应用程序时,它会类似于垂直拆分,然后水平拆分,键盘位于底部,应用程序只有键盘上方可用的大小。

知道这是否可能吗?

【问题讨论】:

  • 你试过设置页面的Margin还是直接设置它的高度?
  • 是的@Rafael,我尝试了“边距”,它引起了一些奇怪的行为,它仍然会向上滚动我的页面,就像它原来的大小一样,导致我的 (白色)页面停止。 (不知道这是否清楚,难以用书面解释:))。我现在正在尝试的高度!
  • 嗯,设置Page的高度时,它什么也没做。在我用我的计算值设置它之前,我还看到高度是 NaN(顺便说一下,之后它仍然保持 NaN)。这正常吗?
  • 嗯...奇怪,我无法测试这个,因为我手头没有支持触摸的计算机:-S。
  • 嗨@Rafael,我也在模拟器中尝试这个。我这里也有一个触摸设备,但它给出了相同的结果......

标签: c# textbox keyboard windows-runtime


【解决方案1】:

由于您自己处理界面遮挡,您应该将 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,我今晚回家后试试这个!
  • 令人惊叹的@Cyprien,就像一个魅力!我现在正在设置页面的边距(而不是 EditBox),这导致我的整个应用程序占用了键盘上方的剩余空间,看起来很完美!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2017-07-25
  • 1970-01-01
  • 2018-09-25
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多