如何不使用Navigation.PushAsync切换CarouselPage当前页面至CarPage1?
现有代码:
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
相关产品推荐
相关产品推荐

