Навигационные кнопки Windows Phone перекрываются с разрешением экрана

Nokia 820 vs Nokia 635 ниже вы увидите экран, работающий в Windows Phone 8.1, один 2 устройства. Оба утверждают, что имеют ширину и высоту видового экрана 800x480, однако, как вы можете видеть из изображения, кнопки навигации 635 перекрывают область игры.

Я проверил различные свойства в GraphicsDevice.Adapter и GraphicsDevice.Viewport, но они оба одинаковы!

Экран работает в коде С# UWP Monogame. Я установил PrefferedBackBufferWidth и Height на 480x800.

Как вы можете определить, будут ли кнопки навигации заняты частью экрана?

Ответы

Ответ 1

Далее я отвечу.

В Windows-телефоне 8.1 есть два значения перечисления ApplicationViewBoundsMode.

  • UseVisible, страницы внутри приложения будут использовать только видимую область, исключая StatusBar, панель приложений и кнопки Soft navigation.

    введите описание изображения здесь

Чтобы приложение использовало параметр ApplicationViewBoundsMode.UseVisible, добавьте следующее в app.xaml.cs перед `Windows.Current.Activate();

#if WINDOWS_PHONE_APP
        ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseVisible);
#endif
  • UseCoreWindow, выложите содержимое окна в область, занятую основным окном (то есть, включая любые окклюдированные области, включая кнопки мягкой навигации). введите описание изображения здесь

Чтобы ваше приложение использовало параметр ApplicationViewBoundsMode.UseCoreWindow, добавьте следующее в app.xaml.cs перед Windows.Current.Activate();

#if WINDOWS_PHONE_APP
        ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);
#endif

В некоторых случаях разработчики могут захотеть использовать параметр UserCoreWindow, чтобы показывать контент в панели приложений, но в качестве программных кнопок навигации по боковым эффектам будут закрыты части вашей страницы для их устранения, следуйте следующему решению.

Вы можете прослушивать ApplicationView.GetForCurrentView(). VisibleBoundsChanged в WindowsPhone и обновлять поле вашей страницы.

Вот статья написанная Joost van по устранению этой проблемы (и поведение, которое вы можете использовать из коробки)

Цитата из объяснения проблемы из приведенной выше ссылки

Если режим привязки к представлению приложения установлен в ApplicationViewBoundsMode.UseCoreWindow в приложении App.Xaml.cs, то телефон сообщает весь размер экрана - не только часть, которая обычно берется в строке состояния сверху, а панель приложения внизу, но также и часть, которая используется панелью кнопок.

И фрагмент из его решения, где он обновляет поле страницы

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

Ответ 2

чтобы скрыть навигационную панель в вашем браузере Windows 7.1 телефона, добавьте следующий код в файл app.xaml.cs в соответствии с методом InitializePhoneApplication()

 RootFrame = new PhoneApplicationFrame();

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