Как изменить стартовую страницу в приложении WP7 - PullRequest
6 голосов
/ 12 февраля 2012

Я хочу иметь различную стартовую страницу в зависимости от того, есть ли какие-то настройки, сохраненные в IsolatedStorage.

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

Я использую MVVM-light, если есть какие-то магические вещи для использования.

Br

1 Ответ

9 голосов
/ 12 февраля 2012

Вы можете сделать это, установив фиктивную страницу в качестве главной страницы вашего проекта.Вы можете изменить главную страницу, отредактировав файл 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)));
    }
}

Редактировать

На самом деле, это еще проще.в конце конструктора приложения просто установите UriMapper с желаемым Uri для замены:

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;
...