Xamarin - 从按钮更改选项卡式页面

Posted

技术标签:

【中文标题】Xamarin - 从按钮更改选项卡式页面【英文标题】:Xamarin - Change tabbed page from button 【发布时间】:2015-12-01 08:01:01 【问题描述】:

我目前正在使用标签页:

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:me="clr-namespace:Let_s_go_out.Views.Pages;assembly=Let_s_go_out"
             x:Class="Let_s_go_out.Views.MainPage"
             >
  <TabbedPage.Children >
    <me:PlacesList />

    <me:PlaceSearch />


  </TabbedPage.Children>
</TabbedPage>

在 PlaceSearch 内容中我有一个按钮:

<StackLayout Grid.Row="9" Orientation="Horizontal" >
          <Button Text="Rechercher" HorizontalOptions="Center" VerticalOptions="Center" Command="Binding Search"></Button>         
        </StackLayout>

所以我的问题是:单击按钮时如何进入“PlaceList”标签页?

谢谢:)

【问题讨论】:

【参考方案1】:

根据需要更改索引

private void FAB_Clicked(object sender, EventArgs e)

    var tab = this.Parent.Parent as TabbedPage;
    tab.CurrentPage = tab.Children[2];            

【讨论】:

【参考方案2】:

您也可以为此使用 MVVM 和 MessagingCenter。

查看:

public partial class AwesomeView : TabbedPage

    public AwesomeView()
    
        InitializeComponent();
        BindingContext = new AwesomeViewModel();
    

    protected override void OnAppearing()
    
        MessagingCenter.Subscribe<AwesomeViewModel, int>(this, "SetActiveTab", (sender, index) => 
            CurrentPage = Children[index];
        );
    

    protected override void OnDisappearing()
    
        MessagingCenter.Unsubscribe<AwesomeViewModel>(this, "SetActiveTab");
    

视图模型:

public class AwesomeViewModel

    public ICommand GoToTabCommand  get; set; 

    private AwesomeViewModel()
    
        InitCommands();
    

    private void InitCommands()
    
        GoToTabCommand = new Command(GoToTab);
    

    private void GoToTab()
    
       MessagingCenter.Send<AwesomeViewModel, int>(this, "SetActiveTab", 1); //REPLACE 1 with the index of your tab
    

您只需要将 GoToTabCommand 命令绑定到按钮或您想要的任何控件。

我建议使用常量而不是“SetActiveTab”。

【讨论】:

【参考方案3】:

我不知道它是否会帮助其他人,但关于第一个答案,它在定义 var 选项卡时删除一个“父级”后对我有用,见下文。

private void FAB_Clicked(object sender, EventArgs e)

    var tab = this.Parent as TabbedPage;
    tab.CurrentPage = tab.Children[2];            

【讨论】:

以上是关于Xamarin - 从按钮更改选项卡式页面的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单选项卡式页面选项卡正在初始化

如何在 Xamarin Forms 中更改选项卡式页面指示器的颜色

为啥我更改的字符串没有出现在使用选项卡式表单 xamarin 的其他页面上

Xamarin 表单选项卡式页面触发器属性不起作用

自定义选项卡式页面渲染器 Xamarin Android

如何从父 shell 选项卡式页面导航到 shell 选项卡式页面