在xamarin表单中保持选项卡栏的可访问性时,无法导航页面

在xamarin表单中保持选项卡栏的可访问性时,无法导航页面,xamarin,xamarin.forms,tabbedpage,navigationservice,Xamarin,Xamarin.forms,Tabbedpage,Navigationservice,所以我有一个选项卡栏和一些附加的页面,我试图通过单击其中一个选项卡栏页面中的按钮来导航到另一个页面(不是选项卡栏页面),在这样做时,页面将替换选项卡栏,我如何能够在选项卡栏内导航,我检查了几个线程,执行PushAsync应该可以做到,但它不起作用 这是我的NavigateAsync方法的一个片段 public async Task NavigateAsync(string pageKey, object[] parameter, bool animated = true) {

所以我有一个选项卡栏和一些附加的页面,我试图通过单击其中一个选项卡栏页面中的按钮来导航到另一个页面(不是选项卡栏页面),在这样做时,页面将替换选项卡栏,我如何能够在选项卡栏内导航,我检查了几个线程,执行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();
public async任务NavigateAsync(字符串pageKey,对象[]参数,bool animated=true)
{
var page=GetPage(pageKey,参数);
等待CurrentNavigationPage.Navigation.PushAsync(页面,动画);
}
私有只读堆栈_navigationPageStack=新堆栈();
private NavigationPage CurrentNavigationPage=>\u navigationPageStack.Peek();

我们在TabbedPage中有一个CurrentPage属性。您将需要此CurrentPage.Navigation对象将页面推入选项卡栏本身。

因此,在我的导航服务中,我使用选项卡页作为导航页来导航到其他页面,但如果您获得当前页面(在将其作为子项添加到选项卡页时,应将其封装在导航中),然后使用它,如果您导航它会在当前页面中创建一个新页面,而不是整个选项卡页面

以下是将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;
        }
    }

您是否愿意立即切换到not,因为我想可能需要做很多更改,并且需要一些时间?是的,我使用了popasync作为well@Cfun我如何使用shell?你能给我介绍一下吗?你发布的代码中没有足够的上下文来显示你的页面结构或者你的导航是如何工作的。我猜您使用的是包含TabbedPage的NavigationPage,而不是包含在TabbedPage中的NavigationPage是的,这有帮助,但我的主页不是tabbar,而是一个普通的contentpage,因此必须稍微修改服务