Как отобразить элемент XAML на весь экран при изменении ориентации страницы?
В моем приложении Windows Phone 8.1 RT у меня есть изображение внутри сводного управления.
Я хочу показать элемент в полноэкранном режиме, когда ориентация страницы меняется на вертикальную.
Любая помощь будет принята с благодарностью.
Мой XAML, как показано ниже.
<Grid x:Name="ContentPanel">
<Pivot Title="{Binding ItemTitle}">
<PivotItem Header="Overview">
<StackPanel Orientation="Vertical">
<Image x:Name="MainImage" Source="{Binding ImageURL}"/>
<TextBlock x:Name="TitleTextBlock" Text={Binding Title}"/>
</StackPanel>
</PivotItem>
<PivotItem Header="Details">
<ScrollViewer>
<TextBlock x:Name="DetailsTextBlock" Text="{Binding Details}"/>
</ScrollViewer>
</PivotItem>
</Pivot>
</Grid>
Я пытаюсь показать управление изображением MainImage
в полноэкранном режиме, когда ориентация страницы изменилась на Пейзаж, и верните ее обратно в обычный поворот, когда ориентация вернется в Портрет.
1 ответ
Вы не можете развернуть содержимое сводного представления так, чтобы оно занимало всю область. Одно из решений - использовать отдельный элемент управления изображением и сделать его скрытым, а при изменении ориентации показать это изображение и скрыть сетку, наоборот, для портретного вида. вот как
Ваша страница Xaml
<Grid Name="MainPage">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OrientationManager">
<VisualState x:Name="Portrate">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="ContentPanel">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="MainImage1">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Landscape">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="ContentPanel">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="MainImage1">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="ContentPanel">
<Pivot Title="{Binding ItemTitle}">
<PivotItem Header="Overview">
<StackPanel Orientation="Vertical">
<Image x:Name="MainImage" Source="{Binding ImageURL}"/>
<TextBlock x:Name="TitleTextBlock" Text="asfsadf"/>
</StackPanel>
</PivotItem>
<PivotItem Header="Details">
<ScrollViewer>
<TextBlock x:Name="DetailsTextBlock" Text="{Binding Details}"/>
</ScrollViewer>
</PivotItem>
</Pivot>
</Grid>
<Image Source="Assets\WideLogo.scale-14012.png" Visibility="Collapsed" Name="MainImage1"></Image>
</Grid>
Удостоверься что VisualStateManager
элемент находится в корневом контроле / Сетка страницы
Код в вашей странице конструктора.
DisplayInformation di = DisplayInformation.GetForCurrentView();
di.OrientationChanged += di_OrientationChanged;
if (di.CurrentOrientation == DisplayOrientations.Landscape || di.CurrentOrientation == DisplayOrientations.LandscapeFlipped)
{
VisualStateManager.GoToState(this, "Landscape", true);
}
else
{
VisualStateManager.GoToState(this, "Portrate", true);
}
Ориентация изменила обработчик событий
void di_OrientationChanged(DisplayInformation sender, object args)
{
if (sender.CurrentOrientation == DisplayOrientations.Landscape || sender.CurrentOrientation == DisplayOrientations.LandscapeFlipped)
{
VisualStateManager.GoToState(this, "Landscape", true);
}
else
{
VisualStateManager.GoToState(this, "Portrate", true);
}
}
Редактировать:
<Grid Name="MainPage">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OrientationManager">
<VisualState x:Name="Portrate">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="PivotHeaderText1">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="PivotHeaderText2">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Landscape">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="PivotHeaderText1">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="PivotHeaderText2">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed">
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="ContentPanel">
<Pivot Title="{Binding ItemTitle}">
<PivotItem>
<PivotItem.Header>
<TextBlock Text="Overview" x:Name="PivotHeaderText1" ></TextBlock>
</PivotItem.Header>
<StackPanel Orientation="Vertical">
<MediaElement AutoPlay="True" x:Name="player" />
<TextBlock x:Name="TitleTextBlock" Text="asfsadf"/>
</StackPanel>
</PivotItem>
<PivotItem>
<PivotItem.Header>
<TextBlock Text="Overview" x:Name="PivotHeaderText2" ></TextBlock>
</PivotItem.Header>
<ScrollViewer>
<TextBlock x:Name="DetailsTextBlock" Text="{Binding Details}"/>
</ScrollViewer>
</PivotItem>
</Pivot>
</Grid>
</Grid>
Надеюсь, поможет.