You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用Navigation.PushAsync切换CarouselPage当前页面至CarPage1?

问题:在CarPage2的Btn_Clicked事件中切换到CarPage1(不使用Navigation.PushAsync)

现有代码:

App.xaml.cs

MainPage = new NavigationPage(new Home());

Home.xaml.cs

public partial class Home : CarouselPage
{
    public Home()
    {
        Children.Add(new CarPage1());
        Children.Add(new CarPage2());
        CurrentPage = new CarPage2();
    }
}

CarPage2.xaml.cs

public partial class CarPage2 : ContentPage
{
    public CarPage2()
    {
        InitializeComponent();
    }

    private void Btn_Clicked(object sender, EventArgs e)
    {
        //Do something
        //I wanna change screen to CarPage1 without use Navigation.PushAsync(new CarPage1());
    }
}

解决方案

因为Home是CarouselPage,它的CurrentPage属性直接控制当前显示的子页面,所以不需要依赖导航栈的PushAsync,只要获取到Home的实例并修改CurrentPage即可。

实现方式1:依赖子页面顺序快速切换

在CarPage2的Btn_Clicked方法中添加代码:

private void Btn_Clicked(object sender, EventArgs e)
{
    // 获取父级的Home页面实例
    var homePage = Parent as Home;
    if (homePage != null)
    {
        // 利用Home中Children的添加顺序,直接取第一个子页面(CarPage1)
        homePage.CurrentPage = homePage.Children[0];
    }
}

实现方式2:通过类型匹配定位(不受顺序影响)

如果担心子页面添加顺序可能变动,可通过类型查找目标页面:

private void Btn_Clicked(object sender, EventArgs e)
{
    var carouselPage = Parent as CarouselPage;
    if (carouselPage != null)
    {
        // 在子页面集合中找到CarPage1实例
        var carPage1 = carouselPage.Children.FirstOrDefault(page => page is CarPage1);
        if (carPage1 != null)
        {
            carouselPage.CurrentPage = carPage1;
        }
    }
}

内容的提问来源于stack exchange,提问作者jjctw1969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:25:23