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

时间:2015-10-11 19:31:19

标签: c# windows-phone monogame uwp

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

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

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

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

2 个答案:

答案 0 :(得分:12)

我会进一步扩展答案。

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

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

    enter image description here

要使您的应用使用ApplicationViewBoundsMode.UseVisible选项,请在Windows.Current.Activate();

之前在app.xaml.cs中添加以下内容
#if WINDOWS_PHONE_APP
        ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseVisible);
#endif
  • UseCoreWindow,在核心窗口所占区域内布置窗口内容(即包括任何遮挡区域 - 包括软导航按钮)。 enter image description here

要使您的应用使用ApplicationViewBoundsMode.UseCoreWindow选项,请在Windows.Current.Activate();

之前在app.xaml.cs中添加以下内容
#if WINDOWS_PHONE_APP
        ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);
#endif

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

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

以下是Joost van在修复此问题时所写的article(以及您可以立即使用的行为)

从上述链接中引用问题说明

  

如果应用程序视图绑定模式在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;
  }
}

答案 1 :(得分:0)

隐藏单一窗口手机8.1游戏中的导航栏在InitializePhoneApplication()方法下的app.xaml.cs文件中添加以下代码

 RootFrame = new PhoneApplicationFrame();

        //I have set it to RootVisual to hide navigationbar
        RootFrame.FullScreen = true;
        if (RootVisual != RootFrame)
            RootVisual = RootFrame;