2013-03-25 20 views
5

Sono il seguente problema:Windows 8 App Store Orientamento Smooth Change

Quando cambio l'orientamento del mio c pagina XAML # + da orizzontale a verticale o viceversa c'è un mezzo secondo o poco più in cui il l'utente può vedere grandi parti blu sullo schermo, prima che il layout venga ricalcolato e reso nuovamente. Questi punti sembrano gli avanzi dallo stato di orientamento precedente.

Sto cercando un modo per nascondere o attenuare questa transizione estremamente irregolare e accidentata.

Ho provato ad aggiungere un gestore di modifica dell'orientamento con un ProgressRing per coprirlo per 1 secondo, ma non ha aiutato - il gestore esegue dopo le macchie blu. Ecco il codice della mia animazione storyboard

<!-- 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> 

Ogni aiuto è apprezzato, grazie!

EDIT: Ho risolto questo utilizzando il metodo seguente (e con l'aiuto del mio collega):

/// <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; 
    } 
+0

È necessario copiare la soluzione in una risposta e contrassegnarla come risolta. – Tilo

risposta

0

So che hai inserito questo completo, ma dal momento che non posso postare un commento devo chiedere qui. Potresti aver appena usato l'easing per risolvere questo?

Problemi correlati