[英]MAUI.NET display a pop up on back button pressed
當用戶點擊 MAUI 應用程序中的后退按鈕時,我試圖顯示一個彈出窗口。
我發現它很棘手,因為 DisplayAlert 是一種需要等待的異步方法,但 OnButtonPressed 的覆蓋是同步的。
如果我嘗試在單獨的可等待任務中發送警報,它將顯示。 但是應用程序仍會導航離開,因為它沒有等待它。
我看不到任何異步覆蓋 OnButtonPressed 的方法。
理想情況下,我正在嘗試做這樣的事情:
protected override bool OnBackButtonPressed()
{
var leave = await DisplayAlert("Leave lobby?", "Are you sure you want to leave the lobby?", "Yes", "No");
if (leave)
{
await handleLeaveAsync();
return base.OnBackButtonPressed();
}
else
{
return false;
}
}
有任何想法嗎? 謝謝!
感謝@Jason 在 Xamarin 中發布指向類似問題的鏈接,這在 MAUI 中有效,並將阻止頁面導航,但是通過此實現,我們無法使用基本行為。
如果您依賴導航歷史記錄,這可能是一個問題,因為您現在指示應用程序在哪里導航,如果他們確認,您將需要更多代碼來保存和檢索歷史記錄以導航回上一個屏幕。
protected override bool OnBackButtonPressed()
{
Dispatcher.Dispatch(async () =>
{
var leave = await DisplayAlert("Leave lobby?", "Are you sure you want to leave the lobby?", "Yes", "No");
if (leave)
{
await handleLeaveAsync();
await Navigation.PushAsync(new MainPage());
}
});
return true;
}
我想保留原始導航歷史記錄,所以我對使用Shell
導航的應用程序執行了以下操作:
private void EditPage_Disappearing(object? sender, EventArgs e)
{
Shell.Current.Navigating -= Current_Navigating;
}
private void EditPage_Appearing(object? sender, EventArgs e)
{
Shell.Current.Navigating += Current_Navigating;
}
async private void Current_Navigating(object? sender, ShellNavigatingEventArgs e)
{
if (e.CanCancel)
{
e.Cancel(); // Cancel original back navigation to allow for prompt to show
if (await DisplayAlert("Ignore changes", "Are you sure you want to leave without saving changes?", "Yes", "No"))
{
Shell.Current.Navigating -= Current_Navigating; // Avoid infinite confirmation loop
await Shell.Current.Navigation.PopAsync(); // Go back
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.