Xamarin.Forms 你能用按钮打开标签页吗?

Xamarin.Forms Can you open a tab with a button?

我是 Xamarin.Forms 的新手,正在为我的应用程序制作一个主页菜单,该菜单已经有用于不同页面的选项卡。

为了向应用程序的新用户展示,我希望在主页上有大按钮,这些按钮也可以转到其中一些特定的选项卡。此示例当前显示我尝试打开 'About' 标签页。

当前代码将尝试从 ICommand 推送“关于”页面的模式(这实际上打开了一个白屏而不是加载实际页面。我还不知道为什么。),但我想它改为打开选项卡。这在 Xamarin.Forms 中可行吗?

public class HomePageViewModel : BaseViewModel
    {
        public HomePageViewModel()
        {
            Title = "Home Page";
            OpenAboutCommand = new Command(async () => await Application.Current.MainPage.Navigation.PushModalAsync(new AboutViewModel()));         
        }

        public ICommand OpenAboutCommand { get; }
    }

您可以试试下面的代码。

Xaml:

 <Button Command="{Binding OpenAboutCommand}"></Button>

代码隐藏:TabbedPage3 是我的标签页。 1 是 tabbedpage3 的选项卡的索引。请注意,索引不能超过标签。

public partial class Page5 : ContentPage
{
    public Page5()
    {
        InitializeComponent();
        this.BindingContext = new Page5ViewModel();
    }
}
public class Page5ViewModel
{
    public ICommand OpenAboutCommand { get; set; }
    public Page5ViewModel()
    {
        OpenAboutCommand = new Command(() =>
        {
            var tab = new TabbedPage3();
            tab.CurrentPage = tab.Children[1];

            Application.Current.MainPage.Navigation.PushModalAsync(tab);
        });

    }
}

事实证明,已经有一种方法 Xamarin.Forms 提到,一旦您将其添加为 AppShell.xaml 中的路由,它就会执行此操作。

这是 AppShell.Xaml 的 XAML。注意 Route="AboutPage".

 <ShellContent Route="AboutPage" x:Name="aboutPage" Title="About" Icon="icon_about.png" ContentTemplate="{DataTemplate local:AboutPage}" />

现在是 cs 代码。 (每个人都喜欢一个好的班轮。)

public class HomePageViewModel : BaseViewModel
    {
        public HomePageViewModel()
        {
            Title = "Home Page";
            OpenAboutCommand = new Command(() => { Shell.Current.GoToAsync("//AboutPage");});
        }

        public ICommand OpenAboutCommand { get; }
    }