Как обрабатывать поворот приложения WPF для использования на планшетах

В настоящее время я работаю над приложением WPF, которое будет работать на планшете с Windows 8.1, и я не нахожу сообщений о следующей проблеме:

Мое приложение должно быть полноэкранным, поэтому я настроил свои просмотры:

 WindowState="Maximized"
 WindowStyle="ToolWindow"

Хорошо, мое приложение будет отображаться в полноэкранном режиме:

Но, если я поверну планшет, место будет выделено, и приложение не будет работать в полноэкранном режиме.

Я не хочу, чтобы этот сценарий происходил, приложение должно всегда оставаться в полноэкранном режиме.

Я попытался прослушать событие SystemEvents.DisplaySettingsChanged и вручную установить полный экран:

SystemEvents.DisplaySettingsChanged += Current_SizeChanged;

private void Current_SizeChanged(object sender, EventArgs eventArgs)
{
    this.WindowStyle = WindowStyle.None;
    this.ResizeMode = ResizeMode.NoResize;
    this.WindowState = WindowState.Maximized;    
    this.UpdateLayout();
}

Как видите, я пытался даже обновить макет, но все равно не работает! Что странно, так это то, что если вы запустите приложение в любом положении, но не в обычном, оно будет работать. Например: если приложение запускается в портретном режиме, поворот не изменит размеры окна, но если вы запустите приложение, начиная с ландшафтного режима... появится ошибка.

Вы можете устранить эту проблему, используя Ctrl + Alt + Arrows.

Какие-либо предложения?

Изменить: Кажется, что проблема вызвана клавиатурой. Зарезервированная зона для клавиатуры, но я не нахожу способ изменить размер на весь экран. Фактическая ширина, ширина и желаемая ширина одинаковы...

Edit2: эта ошибка может быть воспроизведена только в Windows 8.1

3 ответа

Решение

Обходной путь для этой ошибки - слушать DisplaySettingsChanged и вручную устанавливать состояние окон в нормальное состояние и после того, как состояние окон становится максимальным, как показано ниже:

  SystemEvents.DisplaySettingsChanged += Current_SizeChanged;



  private void Current_SizeChanged(object sender, EventArgs eventArgs)
        {
            this.WindowState = WindowState.Normal;
            this.WindowState = WindowState.Maximized;


        }

Это вызвано:

  WindowStyle="ToolWindow" 

Надеюсь, Microsoft устранит эту ошибку (я представил ошибку в потоках WPF на MSDN). Спасибо за помощь!

Используйте свойство в viewmodel, которое будет установлено в методе Current_SizeChanged. Затем поместите триггер данных в это логическое значение и примените RotateTransform 90deg к вашему LayoutTransform.

Ты можешь использовать DisplaySettingsChanged событие SystemEvents учебный класс. Вот пример -> Как определить поворот экрана

Другие вопросы по тегам