2013-04-14 169 views
3

我正在构建Windows Phone 8应用程序,该应用程序使用Pivot控件为不同用户显示给定日期的数据。每个PivotItem拥有不同的用户。Windows Phone - 更改布局方向更改

目前我的应用程序只支持纵向方向,但我也希望支持横向方向。这样做,我希望每个PivotItem不再只显示一个日期的数据,而是整整一周,因此显着改变了布局。

我的第一种方法是使用新布局导航到新页面,但是在为此进行的一些研究中,我了解到可能正确/最佳的方法是更改​​DataTemplate。我假设应该在Pivot控件ItemTemplate上。

但是,这个我还没有能够让我的头脑和工作。因此,我的问题是什么是在方向更改时更改布局的最佳方法 - 导航到新页面或更改DataTemplate - 并且如果要更改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> 

然后定义透视像这样:

<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 - 我只需在

1

正确的语法,您可以创建在页面资源枢轴项新模板,然后处理layoutchange事件:

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

我和你在一起了解事件处理程序并检测方向。但{{}中设置了什么指定模板? –