所有App(xamarin)中的masterdetail页面

时间:2016-11-22 11:09:21

标签: xamarin master-detail

我正在使用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());
}

我的解决方案是https://1drv.ms/u/s!Au38Bd03gO0OltdpwWECrjjsOFTjYA

2 个答案:

答案 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());