2013-03-25 9 views
5

Mam następujący problem:Windows 8 App Store Smooth Orientacja Zmień

Kiedy zmienić orientację moim C# + strony xaml z poziomej na pionową lub odwrotnie jest pół sekundy lub tak, w których użytkownik może zobaczyć duże niebieskie części na ekranie, zanim układ zostanie ponownie obliczony i ponownie renderowany. Te plamki wyglądają jak resztki z poprzedniego stanu orientacji.

Szukam sposobu na ukrycie lub wygładzenie tej niezwykle nierównej i wyboistej transformacji.

Próbowałem dodać obsługę zmiany orientacji przy pomocy ProgressRing, aby pokryć ją przez 1 sekundę, ale to nie pomogło - przewodnik jest uruchamiany po niebieskich kropkach. Oto kod mojego animacji 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> 

Każda pomoc jest mile widziana, dzięki!

EDIT: I rozwiązać to za pomocą następującej metody (i pomocy mojego kolegi):

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

Powinieneś skopiować swoje rozwiązanie do odpowiedzi i oznaczyć je jako rozwiązane. – Tilo

Odpowiedz

0

wiem, że zaznaczone to kompletne, ale ponieważ nie mogę skomentować muszę zapytać tutaj. Czy mógłbyś właśnie użyć łagodzenia, żeby to rozwiązać?