C# Windows 8应用商店应用程序平滑方向更改

C# Windows 8应用商店应用程序平滑方向更改,c#,xaml,windows-8,orientation,windows-store-apps,C#,Xaml,Windows 8,Orientation,Windows Store Apps,我有以下问题: 当我将c#+xaml页面的方向从横向更改为纵向,或者从横向更改为纵向时,在重新计算和渲染布局之前,用户可以在半秒钟左右的时间内看到屏幕上的蓝色大部分。这些斑点看起来像是以前定向状态的残留物 我正在寻找一种方法来隐藏或平滑这个极其粗糙和崎岖的过渡。 我尝试添加一个带有ProgressRing的方向更改处理程序来覆盖它1秒,但没有帮助-处理程序在蓝点之后执行。 这是我的动画故事板的代码 <!-- The entire page respects the narrower 10

我有以下问题:

当我将c#+xaml页面的方向从横向更改为纵向,或者从横向更改为纵向时,在重新计算和渲染布局之前,用户可以在半秒钟左右的时间内看到屏幕上的蓝色大部分。这些斑点看起来像是以前定向状态的残留物

我正在寻找一种方法来隐藏或平滑这个极其粗糙和崎岖的过渡。

我尝试添加一个带有ProgressRing的方向更改处理程序来覆盖它1秒,但没有帮助-处理程序在蓝点之后执行。 这是我的动画故事板的代码

 <!-- The entire page respects the narrower 100-pixel margin convention for portrait -->
            <VisualState x:Name="FullScreenPortrait">
                <Storyboard>
                    <!-- Change the back button and the logo -->
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="backButton" Storyboard.TargetProperty="Style">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PortraitBackButtonStyle}"/>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="headerLogoImage" Storyboard.TargetProperty="Width">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="430"/>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="headerLogoImage" Storyboard.TargetProperty="Height">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="49"/>
                    </ObjectAnimationUsingKeyFrames>

                    <!--Change section title and navButtons to be in two rows, by moving navButtons to the second row, first column-->
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="navButtons" Storyboard.TargetProperty="(Grid.Row)">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="1"/>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="navButtons" Storyboard.TargetProperty="(Grid.Column)">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="0"/>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="navButtons" Storyboard.TargetProperty="(Grid.ColumnSpan)">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="2"/>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="navButtons" Storyboard.TargetProperty="Margin">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="0,15,0,0"/>
                    </ObjectAnimationUsingKeyFrames>

                    <!--Change the grid-->
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemGridView" Storyboard.TargetProperty="Visibility">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemPortraitGridView" Storyboard.TargetProperty="Visibility">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>

感谢您的帮助,谢谢

编辑: 我通过以下方法(在同事的帮助下)解决了这个问题:

//
///更改方向时,折叠所有视图,并仅使特定新方向的视图可见
///同时更改纵向模式的字体大小
/// 
/// 
私有异步void OnOrientationChanged(对象发送方)
{
headerGrid.Visibility=可见性。已折叠;
itemGridView.Visibility=可见性。已折叠;
ItemGraphicGridView.Visibility=可见性。折叠;
itemListView.Visibility=可见性。已折叠;
//使加载微调器暂时可见,并分别在每个方向的故事板动画中停止它
LoadingView.Visibility=可见性.Visibility;
//更改字体大小
if(ScreenHelper.IsInputRaitMode())
{
_viewModel.FontSizeMethod=\u viewModel.GetGraphicFontSize;
}
其他的
{
//将字体大小方法更改回
_viewModel.FontSizeMethod=\u viewModel.GetLandscapeFontSize;
}
//如果xaml方法失败,请将可见性更改回正常状态。
等待任务。延迟(1000);
if(ScreenHelper.IsInputRaitMode())
ItemGraphicGridView.Visibility=Windows.UI.Xaml.Visibility.Visible;
else if(ApplicationView.Value==ApplicationViewState.snaped)
itemListView.Visibility=Windows.UI.Xaml.Visibility.Visible;
其他的
itemGridView.Visibility=Windows.UI.Xaml.Visibility.Visible;
headerGrid.Visibility=可见性.Visibility;
LoadingView.Visibility=可见性。已折叠;
}

我知道您已将此标记为完成,但由于我无法发表评论,因此我不得不在此处询问。您可以用easing来解决这个问题吗?

您应该将您的解决方案复制到答案中,并将其标记为已解决。
/// <summary>
    /// On Orientation change collapse all views, and make visible only the views for the particular new orientation
    /// Also change the font size for portrait mode
    /// </summary>
    /// <param name="sender"></param>
    private async void OnOrientationChanged(object sender)
    {
        headerGrid.Visibility = Visibility.Collapsed;
        itemGridView.Visibility = Visibility.Collapsed;
        itemPortraitGridView.Visibility = Visibility.Collapsed;
        itemListView.Visibility = Visibility.Collapsed;

        //Make the loading spinner temporarily visible and stop it in the StoryBoard animation for every orientation separately
        LoadingView.Visibility = Visibility.Visible;

        //Change the font size
        if (ScreenHelper.IsInPortraitMode())
        {
            _viewModel.FontSizeMethod = _viewModel.GetPortraitFontSize;
        }
        else
        {
            //change font size method back
            _viewModel.FontSizeMethod = _viewModel.GetLandscapeFontSize;
        }

        // Change visibility back to normal in case the xaml approach failed.
        await Task.Delay(1000);

        if (ScreenHelper.IsInPortraitMode())
            itemPortraitGridView.Visibility = Windows.UI.Xaml.Visibility.Visible;
        else if (ApplicationView.Value == ApplicationViewState.Snapped)
            itemListView.Visibility = Windows.UI.Xaml.Visibility.Visible;
        else
            itemGridView.Visibility = Windows.UI.Xaml.Visibility.Visible;

        headerGrid.Visibility = Visibility.Visible;
        LoadingView.Visibility = Visibility.Collapsed;
    }