Обработка ориентации в Windows 8

Требуется создать приложение Windows 8 в стиле Metro, которое не меняет корневой каталог Grid со всем содержимым в режиме Portrait. Я хочу обрабатывать ориентацию в Code и Visual States, но теперь, когда я поворачиваю устройство, весь контент автоматически поворачивается и заполняет новую ширину и высоту.

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

Кроме того, Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences, похоже, не работает


person Ku6opr    schedule 21.04.2012    source источник
comment
Привет, у тебя есть лучшее решение этой проблемы?   -  person asitis    schedule 28.05.2013


Ответы (3)


Дважды щелкните файл «Package.appxmanifest» в проекте вашего метро-приложения, вы должны увидеть конфигурации своего приложения. На странице «Пользовательский интерфейс приложения» вы можете найти «Поддерживаемые ротации» посередине. Вы можете проверить режим, который вы поддерживали, и оставить режим «Портрет» не отмеченным. Тогда ваше приложение больше не будет получать никаких событий "портретного" режима.

Если вы пишете свой собственный манифест appx, вы можете добавить следующий блок в раздел, например:

    <InitialRotationPreference>
      <Rotation Preference="landscape" />
      <Rotation Preference="portraitFlipped" />
      <Rotation Preference="landscapeFlipped" />
    </InitialRotationPreference>
person Whyllee    schedule 21.07.2012
comment
Спасибо за ответ. Проблема в том, что мне нужно получать события изменения ориентации, но отключать автоматические изменения в макете при изменении ориентации. - person Ku6opr; 21.07.2012
comment
Также имейте в виду, что Симулятор НЕ учитывает эти настройки. Вы должны протестировать их на реальном устройстве!! Бог знает почему. Надеюсь, Microsoft разберется с этим. - person NER1808; 03.09.2013

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

person Robert Levy    schedule 21.04.2012
comment
но корневой элемент заполняет новый размер макета, т.е. height и width меняются местами, и после поворота корневой элемент не займет все доступное пространство, а также обрежется по бокам - person Ku6opr; 22.04.2012

Извините, я пропустил ваш основной вопрос. Я не думаю, что вы можете изменить «поворот» корневого элемента после события портретного режима. Потому что на самом деле он не поворачивается относительно экрана, а изменяется размер экрана.

Тем не менее, я полагаю, вы все еще хотите, чтобы пользователь смотрел на ваше приложение в ландшафтном режиме после события портретного режима. Вы можете противостоять воспринимаемому вращению. Вы можете поместить свою бизнес-логику в другой пользовательский элемент управления без предопределенного размера. Поместите этот пользовательский элемент управления на корневую страницу. Когда вы получили событие портретного режима, вы назначаете страницу ActualWidth для высоты пользовательского элемента управления, страницу ActualHeight для ширины пользовательского элемента управления, даете пользователю элемент управления преобразованием рендеринга на 90 градусов и центром преобразования рендеринга x = высота * 0,707/ширина, y = 0,5, тогда пользовательский элемент управления должен просто выровняться по положению ландшафтного режима.

person Whyllee    schedule 22.07.2012
comment
Я думал о таком подходе раньше, но после поворота я получаю обрезанный контроль по бокам. Возможно, существует какое-то обходное решение, но краткое исследование не дает мне результата. - person Ku6opr; 22.07.2012