В форматах Xamarin обработчик событий OnResume находится в классе Application, который не является NavigationPage, поэтому вы не можете выполнять навигацию в OnResume. Когда мое приложение возобновится, если он спит более 30 минут, я хочу, чтобы он вернулся к своей домашней странице, а не вернулся на страницу, где он спал. У меня есть 30-минутная ловушка в OnResume, но я не могу сделать навигацию. Может ли кто-нибудь предложить способ сделать это?Перейдите на страницу по умолчанию из OnResume()
ответ
по умолчанию, в приложении Forms вы храните MainPage
, который в этом случае должен быть NavigationPage
.
public class App : Application
{
public App()
{
// The root page of your application
MainPage = new NavigationPage {
Таким образом, вы можете использовать его, чтобы добраться до Navigation
объекта.
protected override async void OnResume()
{
var nav = MainPage.Navigation;
// you may want to clear the stack (history)
await nav.PopToRootAsync (true);
// then open the needed page (I'm guessing a login page)
await nav.PushAsync(new LoginPage());
}
Великий, спасибо. Я не понимал, что могу получить доступ к объекту MainPage. Вы продуманно предложили очистить историю стека, однако, когда я пытаюсь это сделать, я получаю синтаксическую ошибку: ElementAt не является методом в NavigationStack. Вы действительно пробовали это? – Ric
вам нужно добавить 'using System.Linq;' Xamarin Studio не всегда помогает с отсутствующей библиотекой Linq, потому что это методы расширения, вероятно, но все еще раздражает ;-) –
Попробуйте обновить свой OnResume способ выглядеть следующим образом:
protected async override void OnResume()
{
await MainPage.Navigation.PopToRootAsync (true);
}
Хороший простой ответ. Большое спасибо. Я бы назвал это правильным, но Бенуа попал туда первым. – Ric
это лучше, спасибо, я обновил ответ для справки –
у вас есть какой-либо код фрагмент кода –