diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 13:02:25 -0700 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 16:13:41 -0700 |
commit | 17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch) | |
tree | b5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2266.cs | |
download | xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2 xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip |
Initial import
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2266.cs')
-rw-r--r-- | Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2266.cs | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2266.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2266.cs new file mode 100644 index 00000000..06330460 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2266.cs @@ -0,0 +1,162 @@ +using System; +using Xamarin.Forms; +using Xamarin.Forms.CustomAttributes; +using System.Collections.Generic; + +namespace Xamarin.Forms.Controls +{ +#if APP + [Preserve (AllMembers = true)] + [Issue (IssueTracker.Github, 2266, "Setting a different Detail page from a MasterDetailPage after 2nd time on MainPage", PlatformAffected.iOS, NavigationBehavior.SetApplicationRoot)] + public class Issue2266 : ContentPage + { + public Issue2266 () + { + InitPageContent (); + } + + void InitPageContent () + { + var labelHeader = new Label { + Text = "Select a test", + FontSize = 30, + FontAttributes = FontAttributes.Bold, + VerticalOptions = LayoutOptions.Center, + HorizontalOptions = LayoutOptions.CenterAndExpand + }; + + string[] listItems = { + "MasterDetail Navigation", + "MasterDetail Navigation ->> Page 1", + "MasterDetail Navigation ->> Page 2", + "MasterDetail Navigation ->> Page 3" + }; + + var listView = new ListView { + ItemsSource = listItems + }; + + Content = new StackLayout { + Padding = new Thickness (0, 20, 0, 0), + Children = { + labelHeader, + listView + } + }; + + listView.ItemSelected += delegate(object sender, SelectedItemChangedEventArgs e) { + if (e.SelectedItem == null) + return; + if (e.SelectedItem.Equals (listItems [0])) { + Application.Current.MainPage = MasterDetailHost; + } else if (e.SelectedItem.Equals (listItems [1]) || e.SelectedItem.Equals (listItems [2]) || e.SelectedItem.Equals (listItems [3])) { + // MasterDetail Navigation - direct page open + var item = e.SelectedItem.ToString (); + var index = int.Parse (item.Substring (item.Length - 1)) - 1; + Application.Current.MainPage = MasterDetailHost; + MasterDetailHost.OpenPage (index); + } + + listView.SelectedItem = null; + }; + } + + static MasterDetailNavigation s_masterDetailHost; + + public static MasterDetailNavigation MasterDetailHost { + get { + if (s_masterDetailHost == null) + s_masterDetailHost = new MasterDetailNavigation (); + return s_masterDetailHost; + } + } + + } + + public class MasterDetailNavigation : MasterDetailPage + { + List<NavigationPage> _pages; + + public MasterDetailNavigation () + { + InitPages (); + + var menuList = new ListView { + BackgroundColor = Color.Transparent, + ItemsSource = _pages, + ItemTemplate = new DataTemplate (typeof(TextCell)) + }; + menuList.ItemTemplate.SetBinding (TextCell.TextProperty, "Title"); + + Master = new ContentPage { + BackgroundColor = Color.FromHex ("363636"), + Title = "Menu", + Content = menuList + }; + + Detail = new NavigationPage (new ContentPage { + Padding = new Thickness (20, 20), + Content = new StackLayout { + Children = { + new Label { Text = "Select a menu item" } + } + } + }); + + menuList.ItemSelected += (sender, e) => { + var page = e.SelectedItem as NavigationPage; + if (page != null) { + Detail = page; + IsPresented = false; + } + }; + } + + void InitPages () + { + _pages = new List<NavigationPage> (); + + for (int i = 1; i <= 10; i++) { + var btnSubPage = new Button { + Text = string.Format ("Open sub-page"), + }; + btnSubPage.Clicked += delegate { + OpenSubPage (string.Format ("Sub for page: {0}", i)); + }; + var page = new ContentPage { + Padding = new Thickness (20, 20), + Title = string.Format ("Page {0}", i), + Content = new StackLayout { + Children = { + new Label { Text = string.Format ("Page {0}", i) }, + btnSubPage + } + } + }; + page.ToolbarItems.Add (new ToolbarItem ("START", null, delegate { + Application.Current.MainPage = App.MenuPage; + })); + _pages.Add (new NavigationPage (page) { Title = page.Title }); + } + } + + public void OpenPage (int index) + { + if (index >= _pages.Count) { + // Index out of range + return; + } + Detail = _pages [index]; + } + + async void OpenSubPage (string text) + { + await Detail.Navigation.PushAsync (new ContentPage { + Content = new Label { Text = text } + }); + } + } +#endif +} + + |