Статьи

Приложения Pivot для Windows Phone 7

Если вы использовали проигрыватель Zune из Microsoft или Windows Media Center, то я уверен, что вы видели элемент управления Pivot в действии более, чем пару раз. Если нет, просто следуйте за мной через эту статью.

В последнем выпуске Windows Phone 7 SDK (который сейчас находится в окончательной сборке) разработчики могут создавать приложения, определяемые двумя новыми типами приложений — Pivot и Panorama, бот, основанный на элементах управления, названных так же, как и тип приложения. В этой статье я расскажу о некоторых аспектах разработки приложений на основе Pivot, попытаюсь показать, в чем суть и в каких ситуациях это может быть полезно.

Вам понадобится финальная сборка Windows Phone 7 Developer Tools, установленная, чтобы следовать моим примерам. Если он уже установлен, просто запустите Visual Studio 2010 и создайте новое приложение Pivot для Windows Phone 7:

После создания проекта вы увидите, что он не сильно отличается от любого другого приложения для Windows Phone 7 — у вас та же структура проекта, та же схема XAML — но с одним существенным отличием. Теперь вместо вторичного элемента управления Grid у вас есть элемент управления Pivot:

Элемент управления Pivot позволяет вам иметь несколько элементов Pivot, которые на самом деле являются отдельными панелями, для которых включен выбор смахивания или поворота. Чтобы дать вам представление о том, как это работает, я создал это короткое видео, показывающее элемент управления Pivot в действии на эмуляторе Windows Phone 7.

Элемент управления Pivot не обязательно должен использоваться в контексте приложения Pivot. Вы можете использовать его в любом приложении Windows Phone 7, если у вас есть ссылка на соответствующее пространство имен управления. Итак, давайте подробнее рассмотрим структуру элемента управления, пытаясь использовать его в приложении, отличном от Pivot.

Прежде всего, добавьте ссылку на Microsoft.Phone.Controls :

Теперь на странице, где вы хотите использовать элемент управления Pivot, вы должны объявить для него пространство имен XML, поэтому в заголовке страницы обязательно добавьте эту ссылку xmlns:

xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"

Теперь на своей странице вы можете создать экземпляр элемента управления Pivot:

<controls:Pivot>

</controls:Pivot>

Само по себе это не очень полезно — вам нужен фактический контент, который отображается в различных разделах. Элемент управления Pivot в основном зависит от его потомков (дочерних элементов) — экземпляров PivotItem . PivotItem является членом того же пространства имен, что и сам элемент управления Pivot , поэтому уже внутри элемента управления Pivot вы можете создать несколько экземпляров PivotItem :

<controls:Pivot>
    <controls:PivotItem></controls:PivotItem>
    <controls:PivotItem></controls:PivotItem>
    <controls:PivotItem></controls:PivotItem>
    <controls:PivotItem></controls:PivotItem>
    <controls:PivotItem></controls:PivotItem>
</controls:Pivot>

Экземпляры PivotItem также бессмысленны сами по себе, поэтому вам придется установить некоторые дополнительные свойства, чтобы они работали. Если вы посмотрели видео, упомянутое выше, вы заметили, что к каждой переключаемой панели привязаны определенные заголовки. Они определяются свойством Header для каждого экземпляра PivotItem. Я установил свойство Header для каждого экземпляра PivotItem (упомянутого выше), и мое представление XAML не претерпело много изменений:

<controls:Pivot>
    <controls:PivotItem  Header="red"></controls:PivotItem>
    <controls:PivotItem Header="green"></controls:PivotItem>
    <controls:PivotItem Header="blue"></controls:PivotItem>
    <controls:PivotItem Header="purple"></controls:PivotItem>
    <controls:PivotItem Header="white"></controls:PivotItem>
</controls:Pivot>

Однако теперь я вижу, что в моем элементе управления Pivot есть отдельные панели, предназначенные для определенного содержимого:

Конечно, каждый PivotItem может иметь содержимое, присутствующее в нем. Это можно установить либо через свойство Content, либо просто вставив компонент между тегами PivotItem. Здесь важно помнить: вы можете установить свойство Content только один раз, поэтому этот код будет недействительным:

<controls:PivotItem  Header="red">
    <TextBlock></TextBlock>
    <Image></Image>
</controls:PivotItem>

Контент устанавливается на TextBlock, а затем еще раз на изображение. В случае, если вы хотите иметь несколько элементов управления, вам придется поместить их в контейнер, такой как Grid. При этом, этот код действителен:

<controls:PivotItem  Header="red">
    <Grid>
        <TextBlock></TextBlock>
        <Image></Image>
    </Grid>
</controls:PivotItem>

В целях экспериментирования я вставил сетку в каждый присутствующий элемент PivotItem, для фона был задан цвет, соответствующий имени (просто чтобы показать, как он работает). XAML для этого довольно прост:

<controls:Pivot>
    <controls:PivotItem  Header="red">
        <Grid Height="630" Background="Red" />
    </controls:PivotItem>
    <controls:PivotItem Header="green">
        <Grid Height="630" Background="Green" />
    </controls:PivotItem>
    <controls:PivotItem Header="blue">
        <Grid Height="630" Background="Blue" />
    </controls:PivotItem>
    <controls:PivotItem Header="purple">
        <Grid Height="630" Background="Purple" />
    </controls:PivotItem>
    <controls:PivotItem Header="white">
        <Grid Height="630" Background="White" />
    </controls:PivotItem>
</controls:Pivot>

Результат выглядит следующим образом (очевидно, я не мог показать анимацию скольжения здесь): 

Переключение между экземплярами PivotItem также может быть выполнено в коде позади. Для этого вам нужно установить x: Name как для основного элемента управления Pivot, так и для любого последующего PivotItem, к которому будет обращаться из кода кода. Как только каждый элемент управления имеет уникальный идентификатор, вы можете установить для свойства Pivot.SelectedItem экземпляр PivotItem.

PivotControl.SelectedItem = PivotItemInstance; 

Как видно из этой статьи, элемент управления Pivot можно использовать, когда пользователь сталкивается с несколькими блоками контента, сгруппированными по схожим критериям. Итак, каковы могут быть реальные примеры ситуаций, когда можно использовать элемент управления Pivot? Вот только несколько из них:

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