在 xamarin 表单中保持标签栏可访问的同时无法导航页面

Unable to Navigate pages while keeping the tab bar accessible in xamarin forms

所以我有一个标签栏和一些附加到它的页面,我想做的是通过单击其中一个页面中的按钮导航到另一个页面(不是标签栏页面)选项卡栏页面,在这样做时该页面正在替换选项卡栏,我将如何在选项卡栏本身内导航,我检查了几个线程并执行 PushAsync 应该可以解决问题,但它不起作用

这是我的 NavigateAsync 方法的一个片段

  public async Task NavigateAsync(string pageKey, object[] parameter, bool animated = true)
    {
        var page = GetPage(pageKey, parameter);
        await CurrentNavigationPage.Navigation.PushAsync(page, animated);
    }

  private readonly Stack<NavigationPage> _navigationPageStack = new Stack<NavigationPage>();

    private NavigationPage CurrentNavigationPage => _navigationPageStack.Peek();

我们在 TabbedPage 中有一个 CurrentPage 属性。您将需要这个 CurrentPage.Navigation 对象来将页面推入标签栏本身。

所以在我的导航服务中,我使用 tabbedpage 作为导航页面来导航到其他页面,但是如果你得到当前页面(应该封装在导航中,同时将它们添加为 children 到您的标签页),然后在导航时使用它在当前页面内创建一个新页面而不是整个标签页

这是我将 currentPage 存储为要导航的导航元素的语法

 public Page SetRootPage(string rootPageKey = null, Page pageName = null)
    {
        NavigationPage tempPage = null;
        if (rootPageKey != null)
        {
            var rootPage = GetPage(rootPageKey);
            if (rootPage is TabbedPage tabbedRootPage)
            {
                tempPage = tabbedRootPage.CurrentPage as NavigationPage;
            }
            if (tempPage == null)
            {
                CurrentNavigationPage = rootPage is NavigationPage ? (NavigationPage)rootPage : new NavigationPage(rootPage);
            }
            else 
            {
                CurrentNavigationPage = tempPage;
            }
            return CurrentNavigationPage;
            // as NavigationPage;
            //_navigationPageStack.Clear();
            //var mainPage = new NavigationPage(rootPage);
            // _navigationPageStack.Push(mainPage);
        }
        else
        {
            if (pageName is TabbedPage tabbedPage)
            {
                CurrentNavigationPage = tabbedPage.CurrentPage as NavigationPage;
            }
            else
            {
                CurrentNavigationPage = pageName as NavigationPage;                    
            }
            return CurrentNavigationPage;
        }
    }