按钮事件Xamarin.Forms上的确认对话框

Afz*_*Ali 9 xamarin xamarin.forms

我在Xamarin.Forms应用程序中被困在一点

在后退按钮按下我想要询问用户是否确实要退出,"OnBackButtonPressed"我想显示警告对话框并继续作为用户响应.

但是"OnBackButtonPressed"不是Async我不能写等待DisplayAlert ...请指导我如何实现这个功能?

我使用ContentPage作为NavigationPage的根页面

    public class frmHome : ContentPage
Run Code Online (Sandbox Code Playgroud)

这是代码:

protected override bool OnBackButtonPressed()
{
    var result = await  this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");

    if (result)
        {
            //user wants to exit
            //Terminate application
        }
        else
        {
            //Dont do anything
        }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rda 30

    protected override bool OnBackButtonPressed()
    {
        Device.BeginInvokeOnMainThread(async() => {
            var result = await this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");
            if (result) await this.Navigation.PopAsync(); // or anything else
        });

        return true;
    }
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的。在警报上按是或否,它将保留在同一页面上。 (2认同)
  • 这不起作用,我需要返回false,但这是匿名函数。如果我分配一个值并在函数后进行检查,则该值将始终设置为false,因为检查将不等待警报。请帮忙 (2认同)

Min*_*tan 6

这是对我有用的代码

protected override bool OnBackButtonPressed()
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            var result = await this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");

            if (result)
            {
                System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow(); // Or anything else
            }
        });
        return true;
    }
Run Code Online (Sandbox Code Playgroud)