Могу ли я узнать, с какой страницы пришел пользователь при нажатии кнопки «Назад» на WP7? - PullRequest
5 голосов
/ 09 августа 2011

Мне не очень повезло, когда я нашел ответ в поиске в Google, но возможно ли определить, с какой страницы пришел пользователь?

Или отправьте строку запроса при нажатии кнопки «Назад», чтобы я мог сказать?

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

Ответы [ 5 ]

9 голосов
/ 09 августа 2011

Вы можете использовать свойство NavigationService.BackStack и проверить первую запись в заднем стеке на странице при переходе к ней.

Если эту проверку необходимо выполнить в несколькихстраниц, это может быть помещено в базовый класс.Кроме того, если ваша ситуация соответствует сценарию eula / login, упомянутому @Skomski, его ответ имеет смысл.

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    var lastPage = NavigationService.BackStack.FirstOrDefault();

    if (lastPage != null && lastPage.Source.ToString() == "/MainPage.xaml")
    {
        NavigationService.RemoveBackEntry();
    }
}
4 голосов
/ 09 августа 2011

По сути, вы хотите удалить NavigationEntrys.

Для этого используйте NavigationService.RemoveBackEntry .

Вы можете получить доступ к NavigationService из любого места, используя этот фрагмент:

(App.Current.RootVisual as PhoneApplicationFrame).RemoveBackEntry()

Лучшее решение:

Относительно EULA / экранов входа в систему (и Splash) - не превращайте их в страницы. Если вместо этого вы сделаете их элементами управления всплывающими или диалоговыми окнами, вы можете отобразить или скрыть их в любое время (при первой навигации; когда пользователь нажимает на «защищенную» часть приложения; после истечения времени ожидания и т. Д.), И они этого не делают. потреблять слот в backstack.

Источник: http://blogs.msdn.com/b/ptorr/archive/2010/08/01/exiting-a-windows-phone-application.aspx

1 голос
/ 09 августа 2011

Один из способов - переопределить OnBackKeyPress на каждой странице (кроме главной страницы, потому что это было бы бессмысленно). Внутри этой функции присвойте имя текущей странице глобальной переменной. Теперь страница, на которую вы вернулись, может проверить глобальную переменную и определить, как вы туда попали.

0 голосов
/ 09 августа 2011

Вы можете использовать NavigationService для достижения желаемого результата. В частности, вы можете сделать что-то вроде этого:

var uri = NavigationService.CurrentSource;
if(uri != badUri) { /*proceed...*/ } 

Вот справочная страница:

http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.currentsource.aspx

0 голосов
/ 09 августа 2011

Я не могу придумать способ непосредственного определения нажатия кнопки.

Как насчет переменной сеанса, которая записывает текущую стадию процесса?

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