WP7 знает, когда на странице «Навигация» нажата клавиша «Назад». - PullRequest
4 голосов
/ 21 марта 2011

В Windows Phone 7 есть ли способ узнать, нажата ли спина на странице, на которую вы перешли?Я знаю, что мы можем перехватить на текущей странице, но мне нужно знать, на какой странице я перехожу.то есть, если на 2 страницах написано page1 и page2, кнопка назад нажимается на page2.Мне нужно знать, нажата ли кнопка назад или нет на странице 1.Мне нужно запустить кое-что по нажатию кнопки назад на странице 1.

Ответы [ 6 ]

25 голосов
/ 15 февраля 2012
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back)
    ...
}
5 голосов
/ 22 марта 2011

Это своего рода хак, но вы можете сделать следующее; переопределить OnBackkeyPress событие на каждой странице. В обработчике событий добавьте следующий код:

PhoneApplicationService.Current.State["isbacknav"] = true;

Затем в обработчике событий OnNavigatedTo для каждой страницы проверьте, содержит ли словарь State эту запись.

bool isbacknav = false;
if( PhoneApplicationService.Current.State.ContainsKey( "isbacknav" ) ) {
   isbacknav = (bool)PhoneApplicationService.Current.State["isbacknav"];

   PhoneApplicationService.Current.State["isbacknav"] = false;
   // or
   // PhoneApplicationService.Current.State.Remove( "isbacknav" );
}
0 голосов
/ 22 марта 2011

вы всегда можете определить переменную bool / s в классе App (App.xaml.cs).к ним можно получить доступ с любой страницы следующим способом

в классе приложения

public bool backVariable=false;

на странице Page1.xaml.cs глобально или любым способом

App thisApp=Application.Current as App;

тогда вы можете получить доступ к логической переменной, используя

thisApp.backVariable

0 голосов
/ 22 марта 2011

У меня была точно такая же проблема.Вы можете увидеть ответы здесь

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

0 голосов
/ 21 марта 2011

К сожалению, я не думаю, что есть встроенный способ сделать это.

Когда вам сообщают о OnNavigatingFrom, аргументы события включают NavigationMode - http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigatingcanceleventargs.navigationmode(v=vs.95)

Однако, когда выполучить сообщение об OnNavigatedTo, тогда аргументы события не предоставят вам эту информацию.

Я думаю, что самым простым обходным решением может быть добавление обработчика для NavigationService.Navigating в вашем классе приложения - вы можете кэшировать NavigationMode там.Однако тщательно проверьте это, так как могут возникнуть проблемы с тем, какой код поступает в каком порядке. Кроме того, могут возникнуть проблемы с тем, правильно ли вызывается этот код, когда пользователь переходит обратно на вашу страницу с домашней страницы телефона или из другого приложения

Есть хорошее объяснение NavigationService.Navigating в http://wildermuth.com/2010/10/11/Architecting_WP7_-_Part_1_of_10_Navigation_Framework

0 голосов
/ 21 марта 2011

На каждой странице вы можете переопределить событие OnBackKeyPress, чтобы обнаружить нажатие клавиши «назад».

На этой второй странице вы можете установить глобальный флаг или отправить сообщение на первую страницу.
Для страницы нет возможности узнать, какой была последняя открытая / отображенная страница.Вы сами к этому отнесетесь.

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