Как изменить значок TabbedPage, заголовок и страницу с выбранным, переключение между двумя страницами

Я хочу изменить значок вкладки и страницу после выбора, у меня есть 2 страницы, но я хочу изменить с помощью 1 вкладки и изменить значок и страницу после выбора, как я могу это сделать?

        public MainPage()
    {
        InitializeComponent();

        var login = new NavigationPage(new login())
        {
            Title = "login",
            Icon = "login.png"
        };
        var register = new NavigationPage(new register())
        {
            Title = "register",
            Icon = "register.png"
        };

        if(CurrentPage is register)
        {
            Children.Add(login);
        }
        else
        {
            Children.Add(register);
        }


        this.CurrentPageChanged += (object sender, EventArgs e) =>
        {

            var i = this.Children.IndexOf(this.CurrentPage);

            if (i == 0)
            {
                login.Title = "login";
                login.Icon = "login.png";
            }
            else
            {
                register.Title = "register";
                register.Icon = "register.png";
            }
        };

введите описание изображения здесь


person ShayanMaster    schedule 26.10.2020    source источник


Ответы (1)


Вы можете создать два макета и использовать кнопку для переключения между двумя макетами:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        Content = firstlayout();
    }

    public StackLayout firstlayout() {

        StackLayout stacklayout = new StackLayout
        {
            Margin = new Thickness(20),
            Children =
            {
                new Label { Text = "Primary colors" },
                new BoxView { Color = Color.Red },
                new BoxView { Color = Color.Yellow },
                new BoxView { Color = Color.Blue },
            }
        };

        Button button = new Button
        {
            Text = "Click to change content2",
            VerticalOptions = LayoutOptions.EndAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            HeightRequest = 60,
            BackgroundColor = Color.Green,
            TextColor = Color.White
        };
        button.Clicked +=  (sender, args) => this.Content = secondlayout();
        
        stacklayout.Children.Add(button);

        return stacklayout;
    }

    public StackLayout secondlayout()
    {

        StackLayout stacklayout = new StackLayout
        {
            Margin = new Thickness(20),
            Children =
            {
                new Label { Text = "Secondary colors" },
                new BoxView { Color = Color.Green },
                new BoxView { Color = Color.Orange },
                new BoxView { Color = Color.Purple }
            }
        };

        Button button = new Button
        {
            Text = "Click to change content1",
            VerticalOptions = LayoutOptions.EndAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            HeightRequest = 60,
            BackgroundColor= Color.Green,
            TextColor = Color.White             
        };
        button.Clicked += (sender, args) => this.Content = firstlayout();

        stacklayout.Children.Add(button);

        return stacklayout;
    }

}

Результат:

введите описание изображения здесь

Или вы можете изменить Application.Current.MainPage на разные страницы:

private void Button_Clicked(object sender, EventArgs e)
{
    Application.Current.MainPage = new MainPage();

    //Or

    Application.Current.MainPage = new LoginPage();

}
person Jack Hua    schedule 27.10.2020