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

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

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

экран работает в коде C# UWP Monogame. Я установил PrefferedBackBufferWidth и высота до 480x800.

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

2 ответов


я расширю ответ дальше.

в windows phone 8.1 у вас есть два значения перечисления ApplicationViewBoundsMode.

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

    enter image description here

чтобы сделать ваше приложение использовать добавьте следующее в приложение.код XAML.cs раньше `Windows.Текущий.Активировать ();

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

чтобы сделать ваше приложение использовать добавьте следующее в приложение.код XAML.cs перед Windows.Current.Activate();

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

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

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

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

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

если приложения привязаны режим ApplicationViewBoundsMode.UseCoreWindow в приложении.код 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;
  }
}

чтобы скрыть панель навигации в игре Windows phone 8.1, добавьте в приложение следующий код.код XAML.cs-файл по методу InitializePhoneApplication ()

 RootFrame = new PhoneApplicationFrame();

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