2014-06-11 16 views
11

Chciałbym dodać przejście strony w mojej aplikacji Windows Phone 8.1 w taki sposób, aby następna strona wsuwała się z dołu ekranu. Podobny efekt jest używany po uruchomieniu Bing przez naciśnięcie przycisku Wyszukaj.Windows Phone 8.1 Bing-like animacja strony slajdu

Niestety, MSDN nie jest zbyt opisowy na ten temat. Czy ktoś wie, jak wdrożyć taką animację?

Odpowiedz

17

Najpierw trzeba wyłączyć bieżące Przejścia dla Frame - najlepsze miejsce byłoby w App.xaml.cs gdzie rootframe jest tworzony, ale zależy od sposobu zainicjowania Twojej aplikacji. Tutaj na przykład jest w konstruktorze tytułowa:

public MainPage() 
{ 
    this.InitializeComponent(); 
    Frame mainFrame = Window.Current.Content as Frame; 
    mainFrame.ContentTransitions = null; 
} 

Po wyłączeniu domyślnych przejścia, w każdym Page można zdefiniować własne przejścia:

W Page.xaml:

<Page.Transitions> 
    <TransitionCollection> 
     <PaneThemeTransition Edge="Bottom"/>   
    </TransitionCollection> 
</Page.Transitions> 

nie jestem na pewno, jeśli jest to dokładna animacja, której szukasz. Więcej o animacjach znajdziesz here at MSDN.

Oczywiście można również definiować Frame nowego ContentTransitions, tak że będą one jako domyślny dla wszystkich Pages - na przykład:

// instead of null put in MainPage constructor: 
mainFrame.ContentTransitions = new TransitionCollection { new PaneThemeTransition { Edge = EdgeTransitionLocation.Bottom } }; 
+4

Rozwiązanie, które podałeś jest prawie idealne, dzięki. To jest właśnie rodzaj animacji, o której myślałem. Jednak zaraz po rozpoczęciu animacji poprzednia strona jest czarna. Efektem jest to, że następna strona przesuwa się na czarne pole zamiast poprzedniej strony. Czy wiesz, jak to naprawić? – user3596795

+0

@ user3596795 Czy próbowałeś ustawić animację motywu dla wszystkich stron (na końcu odpowiedzi) - w takim przypadku poprzednia strona zostanie przesunięta w dół przed nowymi slajdami. – Romasz

+1

Po ustawieniu animacji motywu dla wszystkich stron, stara strona rzeczywiście zachowuje się tak, jak opisałeś. Ale nie o to mi chodziło. Chciałbym, aby poprzednia Strona pozostała nieruchoma, gdy następna Strona wślizguje się do Ciebie. Czy masz jakąś wskazówkę, jak ją osiągnąć? – user3596795

3

Domyślne przejścia mogą być zastąpione na jednej nawigacji podstawie z kodu.

NavigationTransitionInfo transitionInfo = new SlideNavigationTransitionInfo(); 
Frame.Navigate(typeof(SecondPage), false, transitionInfo); 

Powyższy kod zmusi SecondPage przesuwać się od dołu exatly tak, jak chcesz. Dotyczy to jednak tylko tego konkretnego scenariusza nawigacji. Jeśli chcesz, aby SecondPage przesuwać się po nawigacji z dowolnego miejsca, ustaw NavigationTransitionInfo w XAML.

<Page.Transitions> 
    <TransitionCollection> 
     <NavigationThemeTransition> 
      <NavigationThemeTransition.DefaultNavigationTransitionInfo> 
       <SlideNavigationTransitionInfo/> 
      </NavigationThemeTransition.DefaultNavigationTransitionInfo> 
     </NavigationThemeTransition> 
    </TransitionCollection> 
</Page.Transitions> 

Spowoduje to, że strona będzie się przesuwać za każdym razem, gdy będzie nawigowana. Ta wartość domyślna może nadal być przesłonięta przez kod dla poszczególnych scenariuszy nawigacji.

Powiązane problemy