Как очистить историю навигации в Silverlight / Windows Phone 7? - PullRequest
5 голосов
/ 23 октября 2010

Я создаю приложение для Windows Phone 7, которое имеет семантику входа / выхода (аутентификацию в веб-приложении).Когда пользователь выходит из системы, я возвращаюсь к экрану входа в систему и забываю аутентификацию сеанса.

При этом я также хотел бы очистить историю навигации, чтобы не вернуться на страницу, которая ожидает ихбыть уже аутентифицированным.

Не могу понять, как это сделать с NavigationService, и мне интересно, есть ли способ сделать это.

Ответы [ 5 ]

6 голосов
/ 23 октября 2010

Здесь есть на что посмотреть. Во-первых, я рекомендую ознакомиться с руководством, предлагаемым здесь.

Представляем концепцию «Места» - Блог Питера Торра

Перенаправление начальной навигации - Блог Питера Торра (в данный момент извините)

Если вы можете работать в соответствии с этим руководством, это лучший путь. Есть конкретные советы по работе с экранами входа в систему.

Если вы вынуждены предлагать функцию кнопки домой. Будьте осторожны, применяя это, так как сертификаторы отбрасывают приложения назад за непредвиденное поведение в отношении навигации. Я чувствую, если эта функция находится за кнопкой «Домой», вы должны быть в порядке в отделе сюрпризов. Как это выдержит со временем с сертификацией мы увидим. Возможно, сценарий «выхода из системы» применяется в равной степени.

Вот три подхода из Ричард Ву , Мартен Стрейс , Сэм Джараван .

3 голосов
/ 02 апреля 2012

Этот код работает хорошо (он должен быть на вашей странице), еще не пытался пройти его сертификацию, но код работает:

 while (true)
 {
     if (this.RemoveBackEntry() == null)
     {
         break;
     }
  }

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

0 голосов
/ 21 июня 2013

Вы должны создать событие "Loaded" для своей страницы

    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
    {
        try { while (NavigationService.RemoveBackEntry() != null) ; }
        catch (System.NullReferenceException ex) { }
    }
0 голосов
/ 08 мая 2013

Более простой способ очистить backstack состоит в следующем

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

Имейте в виду, что если вы сделаете это в загруженном событии, оно будет срабатывать при каждом переходе на страницу, и повторное нажатие снова закроет приложение!

Важное замечание: если вы используете веб-контроль или рекламную систему NAX, обратный ключ используется как страницей, так и веб-элементом управления, поэтому приложение будет существовать, а не возвращаться на страницу.

** Обновление Также только что нашел еще более короткую версию от MS Dev Center

while (NavigationService.RemoveBackEntry() != null);

Одна простая строка. Nice

0 голосов
/ 23 октября 2010

Боюсь, вы не можете очистить стопку страниц, и, более того, ваше приложение не пройдет сертификацию. Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...