2016-09-16 6 views
0

MasterDetail 페이지를 사용하는 응용 프로그램에서 작동하고 있지만, 페이지를 탐색하는 방법에 대해 약간 혼란스러워합니다.Xamarin이 MasterDetailPage 탐색을 구성합니다.

순간 나는 메뉴 항목이 응용 프로그램의 일부 페이지를 열어 잘 작동하고, 사이드 메뉴가 유지됩니다. 인스턴트 메신저와 혼동하는 것은 표시되는 메인 페이지의 버튼을 처리하는 방법입니다. 현재 내 버튼은 새로운 페이지를 열지 만 MasterDetail 페이지의 사이드 메뉴는 일반 NavigationPage로 사라집니다.

아래 버튼 코드를 알려 드리겠습니다.

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

이 방법이 MasterDetail 페이지를 탐색하는 방식입니까, 아니면 뭔가 잘못하고 있다고 생각합니까? 편집을 할

** **이, 난 내 menuopage 및 launchpage 코드를 첨부합니다 도움이 그냥 넣다

:

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을보십시오. 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; 
     } 
    } 
} 

는 그들은 Detail 속성을 설정하고 당신을 위해 탐색을 할 것입니다.

+0

당신은 저를 혼란스럽게하는 것을 보았습니다, 나는 이미 메뉴를 처리해야하지만, 실제 페이지의 버튼으로 이동하는 방법은 너무 명확하지 않습니다. ContentPages를 전혀 사용해야합니까 아니면 그냥 MasterDetailPages를 사용해야합니까? – ADuggan

+0

어쩌면 simpeler, 예제 코드에서'NavigationPage'에'ContentPage'를 감싸는 것에 유의하십시오. 그래서 당신의 코드는 다음과 같습니다 :'Navigation.PushAsync (new NavigationPage (new SocialPage()));' –

관련 문제