3

ピボット コントロールを使用して、さまざまなユーザーの特定の日付のデータを表示する Windows Phone 8 アプリケーションを構築しています。各 PivotItem は異なるユーザーを保持します。

現在、私のアプリケーションは縦向きのみをサポートしていますが、横向きのサポートも組み込みたいと考えています。そうすることで、各 PivotItem に 1 つの日付のデータだけを表示するのではなく、1 週間のデータを表示して、レイアウトを大幅に変更したいと考えています。

私の最初のアプローチは、新しいレイアウトで新しいページに移動することでしたが、これに関するいくつかの調査中に、DataTemplate を変更することがおそらく正しい/最善のアプローチであることがわかりました。ピボット コントロールの ItemTemplate にあるはずだと思います。

しかし、これは頭を動かして仕事をすることができませんでした。したがって、私の質問は、向きが変わったときにレイアウトを変更するための最良の方法は何ですか?新しいページに移動するか、DataTemplate を変更しますか?また、ピボット コントロールのテンプレートを変更する場合は、どのように行う必要がありますか?

編集 - 現在のピボット コントロールのコード

<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 を「単に」指定することだけだと考えています。ただし、そのための正しい構文を見つけることができるようです

4

2 に答える 2

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"
                        ....>

プログラムでデータテンプレートを設定する

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

それはうまくいくはずです!

于 2013-04-14T17:53:30.000 に答える
1

ページ リソースでピボット アイテムの新しいテンプレートを作成し、layoutchange イベントを処理できます。

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e){if (e.Orientation == PageOrientation.LandscapeLeft || e.Orientation == PageOrientation.LandscapeRight)
{
}
else 
{
}}
于 2013-04-14T15:22:15.187 に答える