2012-02-12 22 views
6

Quiero tener una página de inicio diferente dependiendo de si hay algunas configuraciones almacenadas en IsolatedStorage.Cómo cambiar la página de inicio en la aplicación WP7

Bu No sé dónde está la mejor práctica para manejar esto. Es decir, si encuentro algo en el almacenamiento aislado, quiero que el usuario obtenga MainPage; de ​​lo contrario, me gustaría que el usuario obtenga la página Configuración.

Estoy usando MVVM-light si hay algunas cosas mágicas para usar.

Br

+0

http://stackoverflow.com/questions/3892271/how-do-i-change-the-startup-page -on-a-wp7-silverlight-app – driis

Respuesta

9

Usted puede hacer esto mediante el establecimiento de una página ficticia como la página principal de su proyecto. Puede cambiar la página principal editando el archivo WMAppManifest.xml de su proyecto:

<DefaultTask Name="_default" NavigationPage="DummyPage.xaml" /> 

Ahora, detectar todas las navegaciones dirigidas a la página ficticia, y redirigir a cualquier página que desee.

Para ello, en el archivo App.xaml.cs, al final del constructor, suscribirse a la 'Navegando' evento:

this.RootFrame.Navigating += this.RootFrame_Navigating; 

En el controlador de eventos, detectar si la navegación se dirige a la página ficticia, cancelar la navegación, y redirigir a la página que desea:

void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e) 
{ 
    if (e.Uri.OriginalString == "/DummyPage.xaml") 
    { 
     e.Cancel = true; 

     var navigationService = (NavigationService)sender; 

     // Insert here your logic to load the destination page from the isolated storage 
     string destinationPage = "/Page2.xaml"; 

     this.RootFrame.Dispatcher.BeginInvoke(() => navigationService.Navigate(new Uri(destinationPage, UriKind.Relative))); 
    } 
} 

Editar

de hecho, hay incluso más fácil. al final del constructor de aplicaciones, acaba de establecer un UriMapper con la sustitución de Uri desea:

var mapper = new UriMapper(); 

mapper.UriMappings.Add(new UriMapping 
{ 
    Uri = new Uri("/DummyPage.xaml", UriKind.Relative), 
    MappedUri = new Uri("/Page2.xaml", UriKind.Relative) 
}); 

this.RootFrame.UriMapper = mapper; 
+0

Hola, ¿es una buena práctica hacer operaciones a través del almacenamiento aislado en el archivo de la aplicación? –

+0

Siempre y cuando no realice operaciones prolongadas, debería estar bien. No hay ningún problema para acceder al almacenamiento aislado en el archivo de la aplicación, pero debe tener en cuenta que este código se ejecuta antes de que se muestre la primera página de su aplicación. Por lo tanto, solo tiene 5 segundos para hacer sus cálculos, o su aplicación fallará la certificación. –

+0

Greate, TNX para la información sobre la regla de 5 segundos :) Y su segunda solución funciona mejor –

Cuestiones relacionadas