Как обрабатывать поворот приложения 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
учебный класс. Вот пример -> Как определить поворот экрана