Windows Phone: RemoveBackEntry после сбоя навигации

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

private void OnLoaded(object sender, RoutedEventArgs e)
{
    Dispatcher.BeginInvoke(() =>
        {
            try
            {
                NavigationService.Navigate(new Uri("/GamePage.xaml", UriKind.Relative));
                NavigationService.RemoveBackEntry();
            }
            catch (InvalidOperationException)
            {
            }
        });
}

Затем, когда вы нажимаете кнопку "Назад", вы переходите на главную страницу, а не обратно на экран загрузки. На странице нет другой логики.

Тем не менее, я просто получил отклонение в магазине: очевидно, на Samsung Focus и Odyssey навигационная запись для страницы загрузки не была удалена, и пользователь отправляется обратно на страницу загрузки, когда они нажимают кнопку "Назад", а не обратно главное меню. Я предполагаю, что RemoveBackEntry не удалось.

Похоже, это должно работать, я не могу воспроизвести ошибку, и у меня нет Focus или Odyssey для работы. Кто-нибудь знает, что может пойти не так?

2 ответа

Я думаю, что вы должны заменить:

NavigationService.RemoveBackEntry();

с:

 while (NavigationService.CanGoBack)
 {
    NavigationService.RemoveBackEntry();
 }

Вы должны помнить это NavigationService.Navigate выполнит навигацию асинхронно. Поэтому, когда вы звоните NavigationService.RemoveBackEntry()текущая страница может еще не быть в BackStack.

Чтобы это исправить, позвоните RemoveBackEntry в OnNavigatedTo GamePage.

Другие вопросы по тегам