Как и многие современные смартфоны, 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. Рекомендуемое значение по умолчанию для этих свойств — Авто, поэтому полосы прокрутки отображаются только тогда, когда пользователь запускает процесс прокрутки.