2010-09-28 8 views
9

Tengo 3 páginas en mi aplicación. La página n. ° 2 vuelve a la página n. ° 1 y la reenvía a la página n. ° 3. ¿Cómo puedo hacerla para que la navegación de la página n. ° 3 omita la página n. ° 2 y vaya directamente al n. ° 1?¿Cómo eliminar una página del historial de navegación?

+0

Silverlight = WP7!. Tendría menos vistas con las etiquetas adecuadas. :) –

Respuesta

6

Lo que terminé con, es la combinación de páginas n. ° 2 y n. ° 3 en una página. Cuando necesito la página n. ° 2, utilizo el parámetro de navegación para iniciar la página con el contenido # 2 visible, cuando termino con el n. ° 3, simplemente oculto el contenido n. ° 2.

EDITAR: En Mango, hay una función NavigationService.RemoveBackEntry() que hace exactamente lo que se necesita.

+0

this.NavigationService siempre es "nulo" para mí, ¿cómo lo solucionó? – Jonny

+0

@Jonny lo puso en el evento de carga de página – EaterOfCode

0

En lugar de Página # 2 navegar específicamente a Página # 1 Considere el uso de este código: -

NavigationService.GoBack(); 
4

No hay manera de ir directamente desde la página # 3 a la página # 1 sin tener que pasar a través de la página 2 #.

Sin embargo, puede manejar OnNavigatedTo en la página n. ° 2 y si procede de la página n. ° 3, emita otra llamada al NavigationService.GoBack().
Algo así como:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    if (comingFromPage3) 
    { 
    NavigationService.GoBack(); 
    } 

    base.OnNavigatedTo(e); 
} 

Existen varias formas de realizar un seguimiento de si se accede desde la página 3 #. Estaría tentado de ir con una variable global para indicar esto (establecido en la página n. ° 3 y registrado en la página n. ° 2).
Si decide utilizar un seguimiento simple de cuántas veces se ha navegado a la página (es decir, la segunda vez que se navega a la página debe ser a cambio del n. ° 3) tenga cuidado con lo que sucede cuando se descabeza cuando cualquiera de las páginas 2 o la página n. ° 3 se visualiza.

+1

Esto funciona, pero la página # 2 parpadea por una fracción de segundo. No estoy contento con eso. –

2

Si está utilizando el botón de retroceso de hardware, entonces no, no hay una forma directa de hacerlo.

Siempre puede usar el método de navegación para ir directamente a la página uno.

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute)); 

Eso le llevará a la primera página, pero también agregará la página 3 a la pila posterior.

En WPF siempre puede usar el método RemoveBackEntry() para borrar elementos de la pila posterior, pero desafortunadamente no está disponible en Silverlight para el teléfono.

1

Recomiendo overiding el botón de atrás pulse la tecla para dirigir al usuario en el que queremos que se vayan:

override protected void OnBackKeyPress (System.ComponentModel.CancelEventArgs e) { NavigationService.Navigate (nueva Uri (" /MainPage.xaml ", UriKind.Relative)); }

+0

Esto lleva a escribir su propia navegación;) Una vez que haya aplicado este patrón, debe mantenerlo para cada navegación hacia atrás. –

0

debe crear "cargado" evento para su página

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    } 
Cuestiones relacionadas