Как перейти к определенной TabbedPage с помощью TapGesture или нажатия кнопки

Цель: находясь на странице с вкладками, у меня есть рамка и жест касания кадра, при выборе внутри жеста касания кадра я хотел бы, чтобы он перешел на нужную страницу с вкладками, как если бы выбрал страницу с вкладками.

Я пробовал различные методы навигации, однако у них либо будет верхняя кнопка возврата, либо не будут отображаться нижние вкладки, либо они не будут обновлять навигацию по нижнему меню, либо мне придется перейти на главную страницу и выбрать первую вкладку.

У меня есть MainPage с 5 страницами с вкладками.

Пример настройки моих страниц с вкладками: (с использованием представлений: в xaml для выбора страницы).

<NavigationPage Title="Offers">
            <NavigationPage.Icon>
                <OnPlatform x:TypeArguments="FileImageSource">
                    <On Platform="iOS" Value="tab_offers.png"/>
                    <On Platform="Android" Value="tab_offers.png"/>
                </OnPlatform>
            </NavigationPage.Icon>
            <x:Arguments>
                <views:OffersPage />
            </x:Arguments>
        </NavigationPage>

Код, используемый для получения жеста касания в кадре.

<Frame BackgroundColor="Green" HeightRequest="32" WidthRequest="112" Padding="0" CornerRadius="8" HasShadow="False">

  <Frame.GestureRecognizers>
     <TapGestureRecognizer Tapped="TapGestureRecognizer_OfferPage" /
  </Frame.GestureRecognizers>

  <Label Text="Earn Now" TextColor="White" FontSize="14" HorizontalOptions="Center" VerticalOptions="Center" FontAttributes="Bold"/>
</Frame>

В настоящее время я использую следующий метод навигации:

private async void TapGestureRecognizer_OfferPage(object sender, EventArgs e)
        {

            await Navigation.PushModalAsync(new NavigationPage(new MainPage()));            

        }

По сути, я считаю, что должен быть способ выбрать индекс страницы с вкладками или страницу с вкладками из MainPage. Однако не уверен, как это правильно реализовать.

С помощью приведенного выше кода он вернет меня на главную страницу, но на первую загруженную вкладку. Мне нужно, чтобы он был на 4-й вкладке или на OffersPage.

Любая помощь будет оценена.


person OD Applications    schedule 06.03.2020    source источник


Ответы (2)


Если вы хотите перемещаться между 5 страницами вкладок, вы можете использовать MessagingCenter.

в TabbedPage

public MyTabbedPage()
{
   InitializeComponent();

   MessagingCenter.Subscribe<Object, int>(this, "click", ((arg, idx) => {

        // idx the index of pages in tabbed that you want to navigate

        CurrentPage = this.Children[idx];

   }));




}

И отправьте сообщение, нажав на рамку

 MessagingCenter.Send<object, int>(this,"click",2);// if you want to navigation to the third page .
person Lucas Zhang    schedule 06.03.2020
comment
Спасибо, это правильный ответ. ОДНАКО, когда я перехожу на нужную страницу, при переходе обратно на первую страницу она перезагружает ту же страницу, а затем включает кнопку «Назад». Есть ли способ сбросить стек навигации? - person OD Applications; 08.03.2020
comment
Navigation.PopToRootAsync (); Это позволило сбросить стек навигации и использовать ваш код для имитации нажатия на соответствующую вкладку. Спасибо! - person OD Applications; 08.03.2020

Попробуйте использовать это:

private async void TapGestureRecognizer_OfferPage(object sender, EventArgs e)
        {
             await Navigation.PushAsync(new YourPageName());
        }

Дайте мне знать, если у вас возникнут какие-либо вопросы.

person Harsh Shah    schedule 06.03.2020
comment
Да, это позволяет перейти на нужную мне страницу, однако в меню нижних вкладок не отображается, что эта страница находится на нужной вкладке. - person OD Applications; 08.03.2020
comment
Navigation.PopToRootAsync (); был тем, что я в итоге использовал для сброса стека и перехода на нужную страницу. - person OD Applications; 08.03.2020