2012-02-12 2 views
6

Я хочу иметь другую стартовую страницу в зависимости от того, есть ли какие-то настройки, сохраненные в IsolStorage.Как изменить стартовую страницу в приложении WP7

Bu Я не знаю, где лучше всего справиться с этим. I. Если я найду что-то в изолированном хранилище, я хочу, чтобы пользователь получил MainPage, иначе я woluld, как пользователь, получит страницу настроек.

Я использую MVVM-light, если есть какой-то волшебный материал для использования.

Br

+0

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

ответ

9

Вы можете сделать это, установив фиктивную страницу в качестве главной страницы вашего проекта. Вы можете изменить главную страницу путем редактирования файла WMAppManifest.xml вашего проекта:

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

Теперь обнаружить все плавания, направленные на фиктивную страницу и перенаправление на нужную странице вы хотите.

Для этого в файле App.xaml.cs, в конце конструктора, подписаться на событие «ходовом»:

this.RootFrame.Navigating += this.RootFrame_Navigating; 

В обработчик событий, обнаружить, если навигация направлена к вспомогательной странице, отменить навигацию, и перенаправить на страницу, которую вы хотите:

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))); 
    } 
} 

Edit

на самом деле, есть даже Полегче. в конце конструктора приложения, просто установить UriMapper с заменой Ури вы хотите:

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

Привет, Является ли хорошей практикой делать операции через изолированное хранилище в файле приложения? –

+0

До тех пор, пока вы не выполняете длительные операции, все должно быть хорошо. Нет проблем с доступом к изолированному хранилищу в файле приложения, но вы должны знать, что этот код выполняется до того, как будет показана первая страница вашего приложения. Таким образом, у вас есть всего 5 секунд для выполнения ваших вычислений, или ваше приложение будет терпеть неудачу сертификации. –

+0

Greate, tnx для информации о правиле 5 секунд :) И ваше второе решение работает greate –

Смежные вопросы