2016-09-16 4 views
0

これは、MasterDetailページを使用するアプリケーションで動作していますが、うまくいくようですが、ページをナビゲートする方法についてちょっと混乱します。XamarinはMasterDetailPageナビゲーションを形成します

現在、私はメニュー項目がアプリで開いていて、その部分がうまく機能していると、サイドメニューが表示されます。私が混同しているのは、表示されているメインページのボタンをどう扱うかです。私のボタンは現時点では新しいページを開くだけですが、MasterDetailページのサイドメニューは通常のNavigationPageには表示されません。

下記のボタンコードを入力します。

btnSocial.GestureRecognizers.Add(new TapGestureRecognizer 
{ 
    Command = new Command(() => 
    { 
     Navigation.PushAsync(new SocialPage()); 
    }) 
}); 

これはちょうどMasterDetailページがナビゲートするか、何か間違っていると思いますか?

**ただ、包みこれは私が私のmenuopageとlaunchpageコードを添付します、助け**

EDITED:

MenuPage.cs

public class MenuPage : ContentPage 
{ 
    public Action<ContentPage> OnMenuSelect { get; set; } 

    public MenuPage() 
    { 
     Title = "Menu"; 
     Icon = "ic_menu.png"; 
     BackgroundColor = ProjectVariables.PRIMARY_COLOR; 

     var items = new List<MenuItems>() 
     { 
      new MenuItems("Social",() => new SocialPage()), 
      new MenuItems("Career",() => null), 
      new MenuItems("MySchedule",() => null), 
      new MenuItems("Videos",() => null), 
      new MenuItems("Contact",() => null), 
      new MenuItems("Sign in",() => null) 
     }; 

     var dataTemplate = new DataTemplate(typeof(TextCell)); 

     dataTemplate.SetValue(TextCell.TextColorProperty, Color.White); 
     dataTemplate.SetBinding(TextCell.TextProperty, "Name"); 

     var listview = new ListView() 
     { 
      ItemsSource = items, 
      ItemTemplate = dataTemplate 
     }; 

     listview.BackgroundColor = ProjectVariables.PRIMARY_COLOR; 
     listview.ItemSelected += (object sender, SelectedItemChangedEventArgs e) => 
     { 
      if(OnMenuSelect != null) 
      { 
       var item = (MenuItems)e.SelectedItem; 
       var itemPage = item.PageFn(); 

       OnMenuSelect(itemPage); 
      } 
     }; 

     Content = new StackLayout 
     { 
      Orientation = StackOrientation.Vertical, 
      Children = 
      { 
       listview 
      } 
     }; 
    } 
} 

LaunchPage.cs

public class LaunchPage : MasterDetailPage 
{ 
    public LaunchPage() 
    { 
     var menuPage = new MenuPage(); 

     menuPage.OnMenuSelect = (categoryPage) => 
     { 
      Detail = new NavigationPage(categoryPage); 
      //Detail.Navigation.PushAsync(categoryPage); 
      IsPresented = false; 
     }; 

     Master = menuPage; 
     Detail = new NavigationPage(new MainPage()) 
     { 
      BarTextColor = Color.White, 
      BarBackgroundColor = ProjectVariables.PRIMARY_COLOR 
     }; 

     MasterBehavior = MasterBehavior.Split; 
    } 
} 

答えて

0

Xamarinのthis documentation pageをご覧ください。

これはナビゲーションサービスを使用していないようです。マスターページへの参照が必要で、そのためにDetailプロパティを設定します。

特に、this sectionをご覧ください。彼らはDetailプロパティを設定し、それはあなたのためのナビゲーションを行いますListView項目の選択に

public partial class MainPage : MasterDetailPage 
{ 
    public MainPage() 
    { 
     ... 
     masterPage.ListView.ItemSelected += OnItemSelected; 
    } 

    void OnItemSelected (object sender, SelectedItemChangedEventArgs e) 
    { 
     var item = e.SelectedItem as MasterPageItem; 
     if (item != null) { 
      Detail = new NavigationPage ((Page)Activator.CreateInstance (item.TargetType)); 
      masterPage.ListView.SelectedItem = null; 
      IsPresented = false; 
     } 
    } 
} 

+0

あなたは私が混乱していることを知っています。私はすでにメニューを処理していますが、実際のページのボタンでどのようにナビゲートするかはあまりよく分かりません。私はContentPagesをまったく使用するべきですか、それともMasterDetailPagesだけを使うべきですか? – ADuggan

+0

これは簡単なことですが、サンプルコードでは 'NavigationPage'に' ContentPage'をラップしていますが、これを試しましたか?あなたのコードでは、 'Navigation.PushAsync(new NavigationPage(new SocialPage()));' –

関連する問題