Изменение MainPage приложения Maui прерывает обратный вызов OnBackPressedDispatcherC#

Место общения программистов C#
Ответить
Anonymous
 Изменение MainPage приложения Maui прерывает обратный вызов OnBackPressedDispatcher

Сообщение Anonymous »


Я обновил свое приложение на Мауи, чтобы оно использовало .net8 и было нацелено на Android 13. При этом я пытаюсь удалить устаревший base.OnBackPressed();, но столкнулся с проблемой.

Старая логика:

// MainActivity.cs публичное переопределение void OnBackPressed() { если (someCondition() == true) { HandleBackPressMyself(); } еще { base.OnBackPressed(); } } Я запускаю свою страницу следующим образом:

// App.xaml.cs общедоступное приложение() { ИнициализироватьКомпонент(); Начинать(); } частный асинхронный недействительный Start() { страница вар = serviceProvider.GetRequiredService(); Application.Current?.Dispatcher.Dispatch(async () => { ((App)Application.Current).MainPage = страница; ждать Task.Delay(1); }; } Это довольно просто и всегда работало. Теперь я пытаюсь использовать OnBackPressedDispatcher следующим образом:

// MainActivity.cs защищенное переопределение void OnCreate (Bundle saveInstanceState) { base.OnCreate(saveInstanceState); OnBackPressedDispatcher.AddCallback(это, новый BackPressedCallback(это)); } // BackPressedCallback.cs открытый класс BackPressedCallback: OnBackPressedCallback { частная активность только для чтения; public BackPressedCallback (активность): база (истина) { this.activity = активность; } публичное переопределение void HandleOnBackPressed() { если (someCondition() == true) { HandleBackPressMyself(); } еще { вар mainPage = ((App)Microsoft.Maui.Controls.Application.Current)?.MainPage; mainPage.SendBackButtonPressed(); } } } Все это работает хорошо, пока я помещаю новые страницы в стек, используя await NavigationPage.PushAsync(newPage);.

Однако есть несколько сценариев, в которых я хочу удалить MainPage и заменить ее совершенно новой страницей, например:

((App)Application.Current).MainPage = страница входа;

Как только я это сделаю, HandleOnBackPressed() в BackPressedCallback перестанет срабатывать, и вся моя обратная навигация полностью перестанет работать.

Может ли кто-нибудь дать представление о том, почему обратный обработчик перестает работать после того, как я установил Application.Current.MainPage = someNewPage?

Спасибо!

*** ОБНОВЛЕНИЕ ***

Я добавил сюда демо-версию проблемы на GitHub, которую можно скачать и поиграть с ней:

https://github.com/mikeluken/MauiSample
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»