Статьи

Ориентация экрана в Windows Phone 7

Как и многие современные смартфоны, Windows Phone 7 поддерживает изменения ориентации экрана. С помощью Windows Phone 7 SDK можно воспользоваться этими возможностями и настроить поведение приложения в зависимости от текущего состояния ориентации.

Общая информация

Устройство Windows Phone 7 имеет два типа ориентации экрана — книжную и альбомную. И хотя существует несколько типов вышеупомянутых ориентаций (в зависимости от направления наклона — вверх, вниз, letf или вправо), основные взгляды на два базовых типа ориентации следующие:

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

Ориентация экрана в вашем приложении

В вашей разметке XAML вы можете установить два свойства для страницы: SupportedOrientations и Orientation .

SupportedOrientations определяет типы ориентации экрана, которые поддерживает страница, и ограничивается перечислением SupportedPageOrientation , которое определяет три возможных типа: Portrait , Landscape и PortraitOrLandscape . Последнее подразумевает, что страницу можно просматривать как в портретном, так и в ландшафтном режимах.

То же самое можно сделать с помощью code-behind, непосредственно вызвав свойство SupportedOrientations :

С другой стороны, свойство Orientation определяет текущую ориентацию страницы. В отличие от SupportedOrientations , он не может быть изменен во время выполнения. При этом SupportedOrientations превосходит Orientations , поэтому, если во время выполнения изменяется поддерживаемая ориентация, в то время как ориентация страницы имеет другой тип, фактическая ориентация станет той, которая установлена ​​SupportedOrientation. Вы должны быть очень осторожны при изменении этого свойства во время работы приложения.

Для отслеживания изменений ориентации существует обработчик событий OrientationChanged. Он также привязан к странице, с которой вы работаете, поэтому вы можете создать ее из этого (текущий класс страницы):

this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(MainPage_OrientationChanged); 

Затем просто поместите ваш код внутри фактического обработчика:

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
// Your code here
}

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

По умолчанию содержимое страницы помещается в сетку , размер которой автоматически изменяется в зависимости от настроек ориентации. Это нормально, пока содержимое не умещается на странице в одном режиме ориентации, а при переключении на другое — нет. Вот конкретный пример:

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

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

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

ПРИМЕЧАНИЕ. ScrollViewer позволяет задать свойство Content только один раз; поэтому вам придется создать отдельную панель внутри нее, если вы хотите разместить несколько элементов управления.

Хотя прокрутка работает, пользователь может не знать, насколько велика фактическая страница. Чтобы избежать этого, горизонтальные и вертикальные полосы прокрутки могут быть размещены путем назначения свойств VerticalScrollBarVisibility и HorizontalScrollBarVisibility для ScrollViewer. Рекомендуемое значение по умолчанию для этих свойств — Авто, поэтому полосы прокрутки отображаются только тогда, когда пользователь запускает процесс прокрутки.