我正在使用xamarin
(android)开发xaml/c#
表单中的新应用。我为mainpage.xaml
创建了一个masterdetailpage。在mainpage.xaml
我有一个用于导航到page2.xaml
的按钮。
问题是,当我导航到page2.xaml
时,masterdetailpage的菜单不会显示在page2.xaml
中。为什么?
在app.cs
我用这个:
MainPage = new NavigationPage(new MenuPage());
并导航到page2.xaml
我用这个:
private async void NavigateButton_OnClicked(object sender, EventArgs e)
{
await Navigation.PushAsync(new Page2.xaml());
}
答案 0 :(得分:0)
解决方案就是这个!!菜单页面中按钮活动的cs代码是这样的:`private void Button1_OnClicked(object sender,EventArgs e)
{
ChangeDetail(new Argomenti());
}
private void ChangeDetail(Page page)
{
var navigationPage =详细信息为NavigationPage;
if(navigationPage!= null)
{
navigationPage.PushAsync(页);
返回;
}
Detail = new NavigationPage(page);
} `通过这种方式我可以去另一个页面(在这种情况下是Argomenti.xaml),我能够看到menupage,我也能够回去!这是梦幻般的!我想与您分享这个解决方案。在互联网上很难找到完整的解决方案!现在有了解决方案!
答案 1 :(得分:0)
如果您正在使用MVVM和依赖注入,这很有效。
我们通过创建导航服务类作为Singleton来实现这一点,它包装了Xamarin的导航(我们发现这是一个好主意,因为它允许我们围绕导航编写单元测试)。
public class NavigationService : INavigationService
{
private NavigationPage _navigationPage;
private MasterDetailPage _masterPage;
public NavigationService()
{
}
public void RegisterNavigationPage(NavigationPage navigationPage)
{
_navigationPage = navigationPage;
}
public void RegisterMasterPage(MasterDetailPage masterPage)
{
_masterPage = masterPage;
}
public void NavigateTo(Page page)
{
_navigationPage = new NavigationPage(page);
_masterPage.Detail = _navigationPage;
}
}
您可以进一步扩展它以包括PushAsync,PopAsync等等。
在应用启动时,您可以设置以下页面:
public App()
{
InitializeComponent();
var masterPage = new MasterDetailPage();
var navPage = new MyPage1();
masterPage.Master = menuPage;
masterPage.Detail = navPage;
InitialiseNavigationService(navPage, masterPage);
MainPage = masterPage;
}
private void InitialiseNavigationService(NavigationPage navPage, MasterDetailPage masterPage)
{
var navigationService = Container.Get<INavigationService>();
navigationService.RegisterNavigationPage(navPage);
navigationService.RegisterMasterPage(masterPage);
}
然后,您只需通过
调用导航服务“替换”详细信息页面即可 _navigationService.NavigateTo(new MyPage2());