2010-12-14 11 views
13

que tienen este esquema de aplicación:eliminar una página de navegación Pila

[List Page] -> [Detail Page] -> [ShareOnFacebook Page] 
        ^__________________| 
  1. El usuario selecciona una Item en el [List Page]
  2. El usuario puede o no puede hacer clic en un botón de Share si él o ella lo hace , la aplicación navega a un [ShareOneFacebook page] que muestra un Formulario de inicio de sesión de Facebook, publica un mensaje y navega de vuelta
  3. El usuario navega hacia atrás.

Si el usuario compartió en Facebook, "volverá a publicar" el mensaje, porque la aplicación almacena la sesión para que regrese a ShareOnFacebook, y luego vuelva a mi página de detalles.

Si el usuario no compartió, regresa a la Página de lista.

¿Cómo puedo "omitir" la página de ShareOnFacebook en mi pila de navegación?

+0

funciona, pero es bastante el truco. Me gusta el modelo de Androids de poder llamar terminar y luego moverme, funciona muy bien – xximjasonxx

Respuesta

27

Pruebe esto: Llame NavigationService.RemoveBackEntry(); en el método OnNavigatedTo. Esto eliminará la página anterior de la pila. En mi opinión, el truco con Navigation.GoBack(); no es satisfactorio porque muestra la página para eliminar por un corto tiempo.

Nota: sólo funciona con el sistema operativo Windows Phone 7.1 (Mango) SDK

+1

Gracias, cambié la respuesta aprobada. Mi pregunta original fue antes de Mango, pero creo que gente nueva necesitará esta respuesta ahora –

3

Tengo una situación similar en mi aplicación, la resuelvo con una solución muy simple.

Si desea "omitir" una página en su backstack, coloque un poco de lógica en la función NavigatedTo() de esa página.

Por ejemplo: puede tener un bool que establezca en verdadero cuando publique en facebook, y luego coloque el siguiente código en la función NavigatedTo() de la página ShareOnFacebook.

Aquí es pseudo código:

if (alreadyPosted) Navigation.GoBack();

La función GoBack() saltará esta página y volver a la anterior, el usuario nunca verá la página.

0

he publicado un ejemplo para la misma edición here.

El no lineal de navegación por Matt vinculado a hace esencialmente la misma cosa, pero le probablemente sea mejor que mi simple ejemplo.

1

utilizo el método removeBackEntry en la Clase NavigationService.Yo también utilizar esto como una manera de configurar mis propias pantallas de inicio

 private void BWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     // switch screen 
     NavigationService.Navigated += new NavigatedEventHandler(NavigationServiceNavigated); 
     NavigationService.Navigate(new Uri("/Pages/main.xaml", UriKind.Relative)); 

    } 

    void NavigationServiceNavigated(object sender, NavigationEventArgs e) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 
3

Tener un vistazo a la biblioteca sencilla que he escrito para tales fines: http://navcoerce.codeplex.com/

var fluent = new FluentNavigation(RootFrame);       

fluent.WhenNavigatedTo<MainPage>()          
     .ThenTo<LoginPage>()            
     .ThenToAnyPage()             
     .RemoveEntriesFromBackStack(1);         

fluent.WhenNavigatedTo<MainPage>()          
     .ThenTo<LoginPage>()            
     .ThenTo<RegisterPage>()           
     .ThenTo<PaymentPage>()           
     .RemoveEntriesFromBackStackTill<MainPage>();      

fluent.WhenNavigatedTo<MainPage>()          
     .ThenTo<SecondPage>()            
     .ThenTo<RegisterPage>()           
     .ThenOptionallyTo<ForgotPasswordPage>()       
     .ThenToAnyPage()             
     .RemoveEntriesFromBackStackTill<MainPage>();      

fluent.WhenNavigatingTo<PaymentPage>()         
     .RedirectTo<LoginPage>();           

fluent.WhenNavigatingTo<PaymentPage>()         
     .If(() => false)             
     .RedirectWithReturnUri<LoginPage>("ReturnUri"); 
+0

Hola, ¿el proyecto aún está vivo? –

+0

Vitalii, actualmente no desarrollo para WP, así que no realizo ningún cambio en la biblioteca. Pero siéntete libre de copiar el proyecto, aceptaré cualquier cambio que pueda ayudarte a ti y a otros usuarios. – Grigory

+0

Tal vez un poco más tarde, por ahora estoy buscando una solución comprobada para lidiar con la navegación. Tengo fuga de pivote principal, y cuando navego en él, tengo 2 vistas. De alguna manera, usar fluidamente no ayudó en mi caso. –

Cuestiones relacionadas