user3355961
user3355961

Reputation: 725

OnBackButtonPressed Not Firing Xamarin Forms

I am trying to prevent the user of my app from pressing the hardware back button. I have found this code snippet that is in the code behind the xaml file:

protected override bool OnBackButtonPressed()
    {
        return true;
    }

I have tried variations of this including using Boolean instead of Bool and returning base.functionname nothing seems to fire this method. Here is the bigger context:

Code behind:

namespace Watson.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class StartScan : ContentPage
    {
        public StartScan()
        {
            InitializeComponent();
        }
        protected override bool OnBackButtonPressed()
        {
            return true;
        }
    }
}

This is the second page in the stack and disabling the button only needs to happen on this page only, no where else.

Any help would be appreciated.

Upvotes: 7

Views: 9813

Answers (5)

STG
STG

Reputation: 113

OnBackButtonPressed firing when you click the back button on your device, not from your navigation page, do your logic in OnDisappearing!

Upvotes: 3

Eelze Wijma
Eelze Wijma

Reputation: 81

For me it is working with the following code (Samsung Android)

protected override bool OnBackButtonPressed()
{
    //base.OnBackButtonPressed();
    browser.GoBack();
    return true;
}

Upvotes: 1

Noob Coder
Noob Coder

Reputation: 524

You can also add NavigationPage.SetHasBackButton property in the XAML

     NavigationPage.HasBackButton="True"

In the Content Page

Upvotes: 2

Tô Minh Tiến
Tô Minh Tiến

Reputation: 1177

You can do this way:

namespace Watson.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class StartScan : ContentPage
    {
        public StartScan()
        {
            NavigationPage.SetHasBackButton(this, false);
            InitializeComponent();
        }
        protected override bool OnBackButtonPressed()
        {
            // you can put some actions here (for example, an dialog prompt, ...)
            return true;
        }
    }
}

Upvotes: 1

Naveen Bathina
Naveen Bathina

Reputation: 414

This is working for me, I tried in Android and iOS platforms using Xamarin.Forms.

Hope you can resolve with this piece of code.

namespace Test
{
    public partial class TestPage2 : ContentPage
    {
        public TestPage2()
        {
           NavigationPage.SetHasBackButton(this, false);
           InitializeComponent();
        }

        protected override bool OnBackButtonPressed()
        {
            //return base.OnBackButtonPressed();
            return true;
        }
    }
}

Thanks,

Upvotes: 5

Related Questions