3

別の画面領域に対応するために PhoneApplicationPage Orientation が変更されたときに、ピボットの HeaderTemplate を変更しようとしています。私が達成しようとしている最終的な効果は、ランドスケープのピボット ヘッダーの FontSize を縮小して、より垂直なコンテンツのためのスペースを確保することです。

テンプレートは XAML でリソースとして宣言されます。

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="landscapePivotTitleTemplate">
        <TextBlock Text="" Height="0"/>
    </DataTemplate>
    <DataTemplate x:Key="portraitPivotTitleTemplate">
        <TextBlock Text="{Binding}" />
    </DataTemplate>
    <DataTemplate x:Key="portraitPivotHeaderTemplate">
        <TextBlock Text="{Binding}" />
    </DataTemplate>
    <DataTemplate x:Key="landscapePivotHeaderTemplate">
        <TextBlock  Text="{Binding}" FontSize="{StaticResource PhoneFontSizeSmall}" />
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

OrientationChanged のハンドラーで、ページの FrameworkElement.Resource ResourceDictionary から DataTemplate を割り当てます。

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
    if (e.Orientation == PageOrientation.LandscapeLeft || e.Orientation == PageOrientation.LandscapeRight)
    {
        pivot.HeaderTemplate = (DataTemplate)Resources["landscapePivotHeaderTemplate"];
        pivot.TitleTemplate = (DataTemplate)Resources["landscapePivotTitleTemplate"];
    }
    else 
    {
        pivot.HeaderTemplate = (DataTemplate)Resources["portraitPivotHeaderTemplate"];
        pivot.TitleTemplate = (DataTemplate)Resources["portraitPivotTitleTemplate"];
    }            
}

上記のテンプレートを使用すると、TitleTemplate に割り当てることでタイトルが正しく非表示になります。ただし、Header テンプレートの設定は 1 回しかできないようです。その後の HeaderTemplate への割り当ては、新しい PivotItem を追加することによってのみ有効になります。これにアプローチするより良い方法はありますか?

4

0 に答える 0