xamarin形式:如何禁用选项卡按钮

时间:2018-11-05 09:32:18

标签: xamarin.forms

我有一个选项卡式页面,其中我有3个选项卡,我需要启用= false第二和第三选项卡。当我完成第一页时,我需要像表单向导一样工作,然后应启用第二个选项卡= true,我已经尝试过将其作为下面的代码,但是它不起作用

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            x:Name="maintab"
            x:Class="OnlineKIHStore.Views.CheckOuts" 
            BarBackgroundColor="#2F3C51" 
            Title="Checkout"
            BarTextColor="White">

        <ContentPage x:Name="first" Title="Login/Register" Icon="user"  IsEnabled="True">
            <StackLayout>
        </ContentPage>
        <ContentPage x:Name="second" Title="SHIPPING" Icon="shipping" IsEnabled="False">

        </ContentPage>
        <ContentPage x:Name="third" Title="Payment" Icon="payment" IsEnabled="False">

        </ContentPage>
</TabbedPage>

1 个答案:

答案 0 :(得分:0)

  • 如果您提及“ enabled = false”-您可以单击标签栏。它将加载页面,但不允许在该特定页面中执行任何操作。
  • 如果您提到“ IsVisible =“ False”“-仍然可以单击标签栏。您只能看到一个空白屏幕。

一种方法-首先,不要加载所需的标签栏。完成第1页后,插入所需的标签栏。

这是我根据您的代码提供的示例

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        x:Name="maintab"
        x:Class="OnlineKIHStore.Views.CheckOuts" 
        BarBackgroundColor="#2F3C51" 
        Title="Checkout"
        BarTextColor="White">
<TabbedPage.Children>
    <firstPage Title="Login/Register" Icon="user"/>
    <thirdPage Title="Payment" Icon="payment"/>
</TabbedPage.Children>

在.CS文件中

public CheckOuts 
{ 
  InitializeComponent();
if(check_finished_pageone)
 {
    Children.Insert(2, new SecondPage { Title = "SHIPPING", Icon = "shipping" });
}}

完成page1后,请重新加载标签页。因此,现在将添加带有新标签栏的第二页。

另一种方法是,单击第2页后,您可以导航到第1页,提示用户完成第1页

e<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        x:Name="maintab"
        x:Class="OnlineKIHStore.Views.CheckOuts" 
        BarBackgroundColor="#2F3C51" 
        Title="Checkout"
        CurrentPageChanged="TabbedPage_CurrentPageChanged"
        BarTextColor="White">

.CS文件

private async void TabbedPage_CurrentPageChanged(object sender, EventArgs e){
 var i = this.Children.IndexOf(this.CurrentPage);
 if (i == 2)
{
     await App.Current.MainPage.DisplayAlert("Error", "You have to finish the page one before navigating this page", "Ok"))
     this.CurrentPage = this.Children[0];
 }}

此方法允许您单击第二个选项卡,但它将再次重定向到页面1。