簡體   English   中英

MAUI.NET 在按下后退按鈕時顯示彈出窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM