Изменение ItemTemplate ItemControl, размещенного внутри DataTemplate элемента управления pivot в Windows Phone 8
Я новичок в разработке Windows Phone 8. Я пытаюсь создать календарь как макет в моем приложении. Для этого я использовал Pivot control, как в xaml ниже
<phone:Pivot x:Name="Piv" ItemsSource="{Binding Months}" Grid.Row="1" Margin="0,-10,0,0">
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Margin="0,0,0,0" Text="{Binding Name}" Height="70" FontSize="50"/>
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,-20,0,0">
<Grid Margin="0,0,0,0" >
<!-- Header items goes here -->
</Grid>
<ItemsControl x:Name="CalendarControl" ItemsSource="{Binding Days}" ItemTemplate="{StaticResource HorizontalPivotTemplate}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid x:Name="CalGrid">
<!--Colums and rows for layout goes here-->
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
Для Itemcontrol у меня есть две DataTemplates, определенные как ресурс страницы, как указано ниже.
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="VerticalPivotTemplate">
<Grid MinWidth="65" local:ItemsGridLayout.GridRow="{Binding Week}"
local:ItemsGridLayout.GridColumn="{Binding WeekDay}">
<Border BorderThickness="1" BorderBrush="White" >
<Grid Height="76">
<TextBlock VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding Day}" Style="{StaticResource PhoneTextLargeStyle}"/>
<TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Right" Text="{Binding DayMalayalam}" FontSize="16"/>
</Grid>
</Border>
</Grid>
</DataTemplate>
<DataTemplate x:Key="HorizontalPivotTemplate">
<Grid MinWidth="65" local:ItemsGridLayout.GridRow="{Binding Week}"
local:ItemsGridLayout.GridColumn="{Binding WeekDay}">
<Border BorderThickness="1" BorderBrush="White" >
<Grid Height="56">
<TextBlock VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding Day}" Style="{StaticResource PhoneTextLargeStyle}"/>
<TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Right" Text="{Binding DayMalayalam}" FontSize="16"/>
</Grid>
</Border>
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
Теперь мое требование - выбрать один из этих шаблонов и назначить его ItemTemplate ItemControl при изменении ориентации телефона. Для этого я использовал событие OrientationChanged на странице приложения телефона.
private void PhoneApplicationPage_OrientationChanged_1(object sender, OrientationChangedEventArgs e)
{
if (e.Orientation == PageOrientation.PortraitDown || e.Orientation == PageOrientation.PortraitUp)
{
//Assign VerticalPivotTemplate as CalendarControl's ItemTemplate
}
else
{
//Assign HorizontalPivotTemplate as CalendarControl's ItemTemplate
}
}
Я не знаю, что написать в случае, чтобы выполнить мое требование. Я не могу получить доступ к CalendarControl ItemControl здесь. Пожалуйста, кто-нибудь, помогите мне
1 ответ
Я не могу не заметить, что вы просто меняете ширину вашей сетки в DataTemplate, почему бы вам не использовать триггеры для этого вместо изменения всего шаблона...
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Width" Value="56"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Orientation, RelativeSource={RelativeSource AncestorType={x:Type phone:PhoneApplicationPage}}}" Value="PortraitDown">
<Setter Property="Width" Value="76"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>