2013-04-14 2 views
3

피벗 컨트롤을 사용하여 다른 사용자의 특정 날짜에 대한 데이터를 표시하는 Windows Phone 8 응용 프로그램을 작성합니다. 각 PivotItem에는 다른 사용자가 있습니다.Windows Phone - 방향 변경시 레이아웃 변경

현재 내 응용 프로그램은 세로 방향 만 지원하지만 가로 방향도 지원합니다. 그렇게함으로써 각 피벗 아이템이 더 이상 한 날짜의 데이터 만 표시하지 않도록하고 싶습니다. 그러나 한 주 동안 레이아웃을 크게 변경해야합니다.

첫 번째 접근 방식은 새로운 레이아웃으로 새 페이지로 이동하는 것이 었습니다. 그러나 이에 대한 연구 중에는 올바른/최선의 접근 방식이 DataTemplate을 변경하는 것일 수도 있다는 것을 알게되었습니다. 피벗 컨트롤 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을을 지정하고를위한 코드 . 그러나, 나는 다음 layoutchange 이벤트 처리 당신은 페이지 자원 피벗 항목에 대한 새 템플릿을 만들 수

+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> 

손을 제작 : 방향 프로그래밍

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; 
    } 
} 

작동합니다

을 DataTemplate을 설정하여 이벤트

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

을 변경!

+1

감사합니다. igrali - SupportOrientations = "PortraitOrLandscape"를 에 추가해야했습니다.하지만 그 외의 것은 매력과 같습니다. –

1

에 대한 올바른 구문을 찾을 수가 있습니다 : 페이지 자원에서

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

나는 이벤트 핸들러와 오리엔테이션을 발견했다. 그러나 템플릿을 지정하기 위해 {}에 무엇이 들어 있습니까? –