Windows Phone导航按钮与屏幕分辨率重叠

Pau*_*ues 14 c# windows-phone monogame uwp

诺基亚820对诺基亚635在下面你会看到一个在Windows Phone 8.1中运行的屏幕.两者都声称视口宽度和高度为800x480但是从图像中可以看出635的导航按钮与游戏区域重叠.

我已经检查了GraphicsDevice.Adapter和GraphicsDevice.Viewport中的各种属性,但它们都是一样的!

屏幕在C#UWP Monogame代码中运行.我将PrefferedBackBufferWidth和Height设置为480x800.

如何判断导航按钮是否占据屏幕的一部分?

Ahm*_*med 12

我会进一步扩展答案.

在Windows Phone 8.1中,您有两个ApplicationViewBoundsMode枚举值.

  • UseVisible,应用程序内部的页面将仅使用除StatusBar,应用程序栏和软导航按钮之外的可见区域.

    在此输入图像描述

要使用app ApplicationViewBoundsMode.UseVisible选项,请在Windows.Current.Activate();之前在app.xaml.cs中添加以下内容:

#if WINDOWS_PHONE_APP
        ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseVisible);
#endif
Run Code Online (Sandbox Code Playgroud)
  • UseCoreWindow,在核心窗口所占区域内布置窗口内容(即包括任何遮挡区域 - 包括软导航按钮). 在此输入图像描述

要使用app ApplicationViewBoundsMode.UseCoreWindow选项,请在app.xaml.cs中添加以下内容Windows.Current.Activate();

#if WINDOWS_PHONE_APP
        ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);
#endif
Run Code Online (Sandbox Code Playgroud)

在某些情况下,开发人员可能希望使用UserCoreWindow选项在应用栏下显示内容,但作为副作用导航软按钮会遮挡部分页面以解决问题,请按照下一个解决方案进行操作.

您可以在WindowsPhone中侦听ApplicationView.GetForCurrentView().VisibleBoundsChanged 并更新页面的边距.

下面是一个文章上解决这个问题写了Joost的面包车(并且你可以使用现成的行为)

从上面的链接引用问题解释

如果应用程序视图绑定模式在App.Xaml.cs中设置为ApplicationViewBoundsMode.UseCoreWindow,则手机会报告整个屏幕大小 - 不仅是顶部状态栏和底部应用程序栏通常采用的部分,还包括按钮栏使用的部分.

并从他的解决方案的片段,他更新页边距

void KeepInViewBehaviorVisibleBoundsChanged(ApplicationView sender, object args)
{
  UpdateBottomMargin();
}

private void UpdateBottomMargin()
{
  if (WindowHeight > 0.01)
  {
    var currentMargins = AssociatedObject.Margin;

    var newMargin = new Thickness(
      currentMargins.Left, currentMargins.Top, currentMargins.Right,
      originalBottomMargin + 
        (WindowHeight - ApplicationView.GetForCurrentView().VisibleBounds.Bottom));
    AssociatedObject.Margin = newMargin;
  }
}
Run Code Online (Sandbox Code Playgroud)