2013-04-14 2 views
3

Я создаю приложение Windows Phone 8, которое использует элемент управления Pivot для отображения данных для заданной даты для разных пользователей. Каждый PivotItem имеет другого пользователя.Windows Phone - изменение макета при изменении ориентации

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

Мой первый подход состоял в том, чтобы перейти на новую страницу с новым макетом, однако во время некоторых исследований для этого я узнал, что, возможно, правильным/лучшим подходом было бы изменить DataTemplate. Я предполагаю, что это должно быть на элементе управления Pivot ItemTemplate.

Это, однако, я не смог оторвать голову и сделать работу. Поэтому мой вопрос заключается в том, что наилучший подход к изменению макета при изменении ориентации - переход на новую страницу или изменение DataTemplate - и если нужно изменить шаблон элемента Pivot, как это сделать?

EDIT - код для текущего контроля Pivot

<phone:Pivot x:Name="PivotPlatform" Title="DEMO" ItemsSource="{Binding PivotItems}" FontSize="13.333" > 
    <phone:Pivot.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Title}"/> 
     </DataTemplate> 
    </phone:Pivot.HeaderTemplate> 
    <phone:Pivot.ItemTemplate> 
     <DataTemplate> 
      <!-- Controls omitted --> 
     </DataTemplate> 
    </phone:Pivot.ItemTemplate> 
</phone:Pivot><?xml version="1.0" encoding="utf-8"?> 

Я имею в виду, что все, что мне нужно сделать, это извлечь DataTemplate с опущенными управления, а затем «просто» указать желаемый DataTemplate в зависимости от ориентации , Тем не менее, я могу найти правильный синтаксис для этого

+0

Какой код у вас есть? Определенно ** не переходите на новую страницу - просто определяйте изменение ориентации и применяйте другой шаблон (при условии, что ваши данные остаются неизменными). –

+0

Получил это - я найду способ сделать эту работу без перехода на новую страницу :) Я добавил код, однако удалил сам макет, чтобы улучшить удобочитаемость. –

ответ

6

На странице ресурсов определяют как шаблоны

<phone:PhoneApplicationPage.Resources> 
    <DataTemplate x:Key="DataTemplate1"> 
     <!--DEFINE TEMPLATE HERE--> 
    </DataTemplate> 
    <DataTemplate x:Key="DataTemplate2"> 
     <!--DEFINE TEMPLATE HERE--> 
    </DataTemplate> 
</phone:PhoneApplicationPage.Resources> 

Затем определяют Pivot, как это:

<phone:Pivot x:Name="PivotPlatform" 
       Title="DEMO" 
       FontSize="13.333" 
       ItemsSource="{Binding PivotItems}"> 
     <phone:Pivot.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}" /> 
      </DataTemplate> 
     </phone:Pivot.HeaderTemplate> 
    </phone:Pivot> 

руку ле ориентации события изменения

<phone:PhoneApplicationPage .... 
         OrientationChanged="PhoneApplicationPage_OrientationChanged" 
         ....> 

путем установки DataTemplate программного

private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) 
{ 
    if (e.Orientation == PageOrientation.PortraitDown || e.Orientation == PageOrientation.PortraitUp) 
    { 
     PivotPlatform.ItemTemplate = this.Resources["DataTemplate1"] as DataTemplate; 
    } 
    else 
    { 
     PivotPlatform.ItemTemplate = this.Resources["DataTemplate2"] as DataTemplate; 
    } 
} 

Это должно работать!

+1

Спасибо igrali - Мне просто нужно было добавить SupportedOrientations = "PortraitOrLandscape" в <телефон: PhoneApplicationPage ... но кроме этого работает как шарм –

1

Вы можете создать новый шаблон для Pivot элемента Page ресурсы затем обрабатывать layoutchange событие:

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e){if (e.Orientation == PageOrientation.LandscapeLeft || e.Orientation == PageOrientation.LandscapeRight) 
{ 
} 
else 
{ 
}} 
+0

Я с тобой про обработчик событий и обнаруживаю ориентацию. Но что входит в {} для установки шаблона? –