2010-10-22 2 views
5

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

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

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

ответ

6

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

Introducing the concept of “Places” - Peter Torr's Blog

Redirecting an initial navigation - Peter Torr's Blog (вниз в тот момент, извините)

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

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

Ниже представлены три подхода: Richard Woo, Maarten Struys, Sam Jarawan.

+0

Спасибо Mick. Я с нетерпением жду, чтобы прочитать этот пост, когда он вернется. У меня возникли проблемы с тем, как очень типичный сценарий входа в систему и выхода из системы, особенно при аутентификации с удаленными ресурсами, вписывается в то, что я читал о правилах навигации по телефонам в Windows. – dkackman

+0

На самом деле было два сообщения, я редактировал выше - читайте в представленном порядке. Его блог обратно кстати. –

+1

Похоже, этот совет сделал это и в документации недавно. http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx –

0

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

3

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

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

Это, кажется, отличаются с documentation, в котором говорится, что исключение будет поднято, когда больше нет элементов, поэтому у меня есть logged a bug для голоса пользователя, поэтому он может измениться в будущем.

0

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

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

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

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

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

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

Один простой линии.Nice

0

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

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    } 
Смежные вопросы