2017-05-05 29 views
2

我有一个xamarin表单应用程序。该布局是使用自定义的rootpage.cs文件创建的。它有用于浏览页面的导航菜单。在App.cs文件重定向到根页通过在将MasterDetailPage添加到Xamarin表单中的容器错误之前,必须设置Master和Detail

MainPage = new RootPage();

里面的rootPage类文件

Dictionary<MenuType, NavigationPage> Pages { get; set; } 
    public RootPage() 
    { 
     Pages = new Dictionary<MenuType, NavigationPage>(); 
     Master = new MenuPage(this); 
     BindingContext = new BaseViewModel 
     { 
      Title = "Manager", 
      Icon = "icon.png" 
     }; 
     NavigateAsync(MenuType.Home); 
     InvalidateMeasure(); 
    } 
    public async Task NavigateAsync(MenuType id) 
    { 
     Page newPage; 
     if (!Pages.ContainsKey(id)) 
     { 
      switch (id) 
      { 
       case MenuType.Home: 
        Pages.Add(id, new NavigationPage(new HomePage())); 
        break; 
       case MenuType.AboutUs: 
        Pages.Add(id, new NavigationPage(new ContactUsPage())); 
        break; 
      } 
     } 
     newPage = Pages[id]; 
     if (newPage == null) 
      return; 
     Detail = newPage; 
     IsPresented = false; 
    } 

在菜单页面的类文件具有下面的代码

RootPage root; 
    public MenuPage(RootPage _root) 
    { 
     root = _root; 
     InitializeComponent(); 
     List<HomeMenuItemModel> menuItems; 
     BindingContext = new BaseViewModel 
     { 
      Title = "Sample App", 
      Subtitle = "Sample App", 
      Icon = "icon.png" 
     }; 
     ListViewMenu.ItemsSource = menuItems = new List<HomeMenuItemModel> 
      { 
       new HomeMenuItemModel { Title = "Home", MenuType = MenuType.Home, Icon ="icon.png" }, 
       new HomeMenuItemModel { Title = "Contact Us", MenuType = MenuType.ContactUs, Icon ="icon.png" }, 
       new HomeMenuItemModel { Title = "About Us", MenuType = MenuType.AboutUs, Icon ="icon.png" }, 
      }; 
     ListViewMenu.SelectedItem = menuItems[0]; 
     ListViewMenu.ItemSelected += async (sender, e) => 
     { 
      if (ListViewMenu.SelectedItem == null) 
       return; 
      if (e.SelectedItem != null) 
       await this.root.NavigateAsync(((HomeMenuItemModel)e.SelectedItem).MenuType); 
      ListViewMenu.SelectedItem = null; 
     }; 
    } 

首页.xaml只是一个内容页面。 虽然第一次运行应用程序,但它显示错误“Master和Detail必须在将MasterDetailPage添加到容器错误之前设置” 我是xamarin的新手。你能否为此提出一个解决方案。

回答

4

错误实际上是怎么回事。在将其添加到容器页面之前,您需要设置MasterDetailPageMasterDetail属性,例如,像NavigationPage。

+0

Detail属性没有在我的情况下设置。谢谢! – JedatKinports

0

这个错误大多发生在XAML中缺少属性Title时。 检查您是否在XAML中为侧边菜单页和主页分配了Title={Binding Title}。如果这个问题没有解决,请发布日志文件。

1

添加,正你的构造此代码:

Master = new MenuPage(this); 
Detail = new MenuPage(this); 

这对我的作品。

相关问题