2012-06-11 13 views
6

W Phone 7 aplikacji Windows I dostał currentPage, który na specjalnym imprezy ma przejść do nowej strony za pomocą NavigationService:Przejdź do nowej strony bez umieszczania bieżącej strony na stosie z powrotem?

NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative)); 

Teraz, gdy użytkownik kliknie powrotem na NEWPAGE chcę aplikację do pomiń CurrentPage i przejdź bezpośrednio do MainPage aplikacji.

Próbowałem użyć NavigationService.RemoveBackEntry, ale to usunie stronę główną zamiast CurrentPage.

Jak przejść do nowej strony bez umieszczania prądu na tylnym stosie?

Odpowiedz

11

Podczas przechodzenia do parametru NewPage.xaml należy przejść wzdłuż parametru, aby wiedzieć, kiedy usunąć poprzednią stronę z backstacku.

Można to zrobić w następujący sposób:

Podczas nawigacji z CurrentPage.xaml do NewPage.xaml przejść parametr

 

    bool remove = true; 
    String removeParam = remove ? bool.TrueString : bool.FalseString; 

    NavigationService.Navigate(new Uri("/NewPage.xaml?removePrevious="+removeParam , UriKind.Relative)); 

W przypadku OnNavigatedTo z NEWPAGE .xaml, sprawdź, czy usunąć poprzednią stronę, czy nie.

 

    bool remove = false; 

    if (NavigationContext.QueryString.ContainsKey("removePrevious")) 
    { 
     remove = ((string)NavigationContext.QueryString["removePrevious"]).Equals(bool.TrueString); 
     NavigationContext.QueryString.Remove("removePrevious"); 
    } 

    if(remove) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 

W ten sposób, można zdecydować się na CurrentPage.xaml, jeśli chcesz, aby usunąć go z backstack.

+0

Jak to zrobić w aplikacjach Windows Store? Widząc, że nie mamy "RemoveBackEntry()"? – GONeale

+0

Jeszcze się nad tym nie zastanawiałem, wiem tylko, że działa to na WP7. Jeśli zdarzy mi się znaleźć odpowiedź, opublikuję ją tutaj. – akalucas

0

To brzmi jak wywołanie RemoveBackEntry na początku (podczas gdy wciąż jesteś na CurrentPage.xaml). To dlatego usunięcie MainPage.xaml. Po przejściu do NewPage.xaml w wywołaniu zdarzenia OnNavigatedTo NavigationService.RemoveBackEntry i powinno to naprawić problem.

+0

Muszę wywołać to na stronie CurrentPage, ponieważ NewPage nie wie, że musi usunąć z powrotem stos. – Sam

+0

@Sam Sprawdź odpowiedź akalukusa. To było coś, co miałem na myśli, nazywając to wydarzenie OnNavigatedTo. Będziesz także w stanie stwierdzić, czy przychodzisz z CurrentPage.xaml czy nie. – loyalpenguin

1

Skąd nazwałaś "NavigationService.RemoveBackEntry()"? Myślę, że musisz to zrobić na nowej stronie, a nie na stronie, którą chcesz pominąć!

edytuj: Aby uzyskać lepszy obraz: masz stronę główną -> 1rst stronę podrzędną (należy pominąć przy nawigacji z tyłu) -> druga strona podrzędna, która jest niezależna od pierwszej strony podrzędnej.

2 pomysły: 1) Spróbuj zadzwonić "NavigationService.RemoveBackEntry()" w OnNavigatedFrom-Event 1rst sub stronie 2) Sprawdzić w OnNavigatedTo-wydarzeniem 1rst podstrony jeśli NavigationMode (patrz zdarzenia args) == Wróć i przejdź ponownie.

+0

Muszę wywołać to na stronie CurrentPage, ponieważ NewPage nie wie, że musi usunąć tylny stos. – Sam

+0

edytowałem moją odpowiedź –

Powiązane problemy