MAUI.NET 在按下后退按钮时显示弹出窗口

Ale*_*lex 3 c# maui

我试图在用户点击 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

Ale*_*lex 5

感谢 @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;
}
Run Code Online (Sandbox Code Playgroud)