C# 导航到Xamarin Shell中的特定顶部选项卡页面

C# 导航到Xamarin Shell中的特定顶部选项卡页面,c#,xaml,xamarin,xamarin.forms,xamarin.forms.shell,C#,Xaml,Xamarin,Xamarin.forms,Xamarin.forms.shell,我的应用程序在AppShell.xaml文件中定义了以下弹出项元素: <FlyoutItem ...> <ShellContent Title="A" Route="R1" ... /> <ShellSection Title="B" Route="R2"> <ShellContent Title="C" Route=&qu

我的应用程序在
AppShell.xaml
文件中定义了以下
弹出项
元素:

<FlyoutItem ...>
    <ShellContent Title="A" Route="R1" ... />
    <ShellSection Title="B" Route="R2">
        <ShellContent Title="C" Route="R3" ... />
        <ShellContent Title="D" Route="R4" ... />
    </ShellSection>
    <ShellContent Title="D" Route="R5" .../>
    <ShellContent Title="E" Route="R6" ... />
</FlyoutItem>

我希望获得的行为如下:

  • 单击
    B
    页面,我希望将用户重定向到名为
    B
    ShellSection
    C
    选项卡(这是默认行为,是开箱即用的)
  • 单击
    D
    页面,我希望将用户重定向到名为
    B
    shell部分的
    D
    选项卡

如何获得此信息?

如果您同意以下内容:

如果当前选择/显示的页面是上选项卡“D”(底部选项卡“B”的子选项卡),并且用户再次单击底部选项卡“B”将不会发生任何情况,导航将不会转到“C”,如果显示页面“A”或“E”(属于“B”部分的页面除外),并且您单击“B”,则将显示“C”,如果您单击“D”,则显示相同它将显示“D”,而这个问题可能对您有所帮助

在Appshell.cs中:

public AppShell()
{
...
      InitializeComponent();
      Navigating += Shell_Navigating;
}

private async void Shell_Navigating(object sender, ShellNavigatingEventArgs e)
{
    if (e.Target.Location.OriginalString.Equals("//R5") && e.CanCancel)
    {
        e.Cancel();
        await Shell.Current.GoToAsync("//R2/R4");
    }
}

如果您同意以下内容:

如果当前选择/显示的页面是上选项卡“D”(底部选项卡“B”的子选项卡),并且用户再次单击底部选项卡“B”将不会发生任何情况,导航将不会转到“C”,如果显示页面“A”或“E”(属于“B”部分的页面除外),并且您单击“B”,则将显示“C”,如果您单击“D”,则显示相同它将显示“D”,而这个问题可能对您有所帮助

在Appshell.cs中:

public AppShell()
{
...
      InitializeComponent();
      Navigating += Shell_Navigating;
}

private async void Shell_Navigating(object sender, ShellNavigatingEventArgs e)
{
    if (e.Target.Location.OriginalString.Equals("//R5") && e.CanCancel)
    {
        e.Cancel();
        await Shell.Current.GoToAsync("//R2/R4");
    }
}

我认为第一个条件已经按预期工作了,对吗?@Cfun是的,它是。我认为第一个条件已经按预期工作了,对吗?@Cfun是的,它是。