別の画面領域に対応するために 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 を追加することによってのみ有効になります。これにアプローチするより良い方法はありますか?