Управление на ориентациите в 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