Программное переключение между вкладками на TabbedPage - PullRequest
1 голос
/ 07 мая 2020

У меня есть страница с вкладками с 4 дочерними элементами (4 вкладки), и я хочу переопределить кнопку возврата, чтобы всегда устанавливать первую 1 страницу, когда вы sh ее. Я пробовал несколько способов, это кажется мне наиболее разумным, но это не работает - tabbedPage всегда имеет значение null (когда я переопределяю на всех вкладках)

protected override bool OnBackButtonPressed()
{
    var tabbedPage = this.Parent as TabbedPage;
    tabbedPage.CurrentPage = tabbedPage.Children[1];
    return base.OnBackButtonPressed();
}

Я пытался переопределить эту кнопку возврата в TabbedPage Parent вот так:

protected override bool OnBackButtonPressed()
{
    if(CurrentPage == FirstPage)
    {
        return base.OnBackButtonPressed();
    }
    CurrentPage = FirstPage;
    return true;
}

, но он всегда закрывает мое приложение. Есть идеи, почему эта tabbedPage для меня пуста?

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Вы можете установить текущую TabbedPage в App.xaml.cs , когда установите MainPage приложения.

в App.xaml.cs

MainPage вот TabbedPage в вашем проекте.

public partial class App : Application
{
    public MainPage CurrentPage { get; }
    public App()
    {
        InitializeComponent();

        MainPage tabbedPage = new MainPage();
        CurrentPage = tabbedPage;

        DependencyService.Register<MockDataStore>();
        MainPage = tabbedPage;
    }
    //...
}

И теперь вы можете получить к нему доступ на дочерней странице.

protected override bool OnBackButtonPressed()
{

    App currentApp = Application.Current as App;
    var tabbedpage = currentApp.CurrentPage;

    tabbedpage.CurrentPage = tabbedpage.Children[0];

    return true;

}

Приведенный выше код отлично работает в моем проекте. Если это по-прежнему не работает с вашей стороны, вы можете поделиться образцом, чтобы я мог его протестировать.

1 голос
/ 12 мая 2020

Моя проблема заключалась в том, что моя дочерняя страница - NavigationPage, и я должен использовать this.Parent.Parent для приведения. Вот как это должно быть сделано, когда вы используете NavigaionPage как Children из TabbedPage

protected override bool OnBackButtonPressed()
{
    var tabbedPage = this.Parent.Parent as TabbedPage;
    tabbedPage.CurrentPage = tabbedPage.Children[0];
    return true;
}
1 голос
/ 07 мая 2020

Во-первых, когда у вас есть TabbedPage, OnBackButtonPressed вызывается не в ContentPage, а вместо этого в самой TabbedPage. Итак, правильное место для переопределения метода действительно находится в TabbedPage.

Во-вторых, если вы переопределите метод в самой TabbedPage, он выполнит свою работу, например:

protected override bool OnBackButtonPressed()
{
    var firstPage = Children[0];
    if (CurrentPage == firstPage)
    {
        return base.OnBackButtonPressed();
    }

    CurrentPage = firstPage;
    return true;
}

NB: будьте осторожны с вашей коллекцией Children. Если вы обернули свои страницы в NavigationPage, проверка не будет правильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...