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.