- PushAsync
Move from one page to another; the application will push a new page onto the navigation stack where it will become the active page.
- PopAsync
To return back to the previous page, the application will pop the current page up from the navigation stack, and the new topmost page becomes the active page.
![]()
Let's start :)
Step 1
You can create a new Xamarin.Forms app by going to File ->> New -> Visual C# -> Cross Platform >> Cross-Platform App (Xamarin.Native or Xamarin.Forms), give the application name, and press OK.
(Project Name : HierarchicalNavigation)
![]()
Step 2
Open Solution Explorer >> HierarchicalNavigation(PCL) >> right click and select "New Item". In the popup window, select Cross Platform ->> Class.
This way, you can add a new class. Create a new Class named MainPage1, double-click to get into its design view, and insert the code given below.
CS code
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xamarin.Forms;
-
- namespace NavigtionHirechical
- {
- class MainPage1 : ContentPage
- {
- public MainPage1()
- {
-
- var nextPageButton = new Button { Text = "Next Page", VerticalOptions = LayoutOptions.CenterAndExpand };
- nextPageButton.Clicked += NextPageButton_Clicked;
-
- Title = "MainPage";
- Content = new StackLayout
- {
-
- Children =
- {
-
- nextPageButton
- }
- };
- }
-
- async void NextPageButton_Clicked(object sender, EventArgs e)
- {
- await Navigation.PushAsync (new MainPage2());
- }
-
- }
- }
Step 3
Similarly, create another class named MainPage2 and add the following code.
CS Code
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xamarin.Forms;
-
- namespace NavigtionHirechical
- {
- public class MainPage2 : ContentPage
- {
- public MainPage2()
- {
- var nextPageButton = new Button { Text = "Next MainPage3", VerticalOptions = LayoutOptions.CenterAndExpand };
- nextPageButton.Clicked += OnNextPageButtonClicked;
-
- var previousPageButton = new Button { Text = "Previous MainPage1", VerticalOptions = LayoutOptions.CenterAndExpand };
- previousPageButton.Clicked += OnPreviousPageButtonClicked;
-
- Title = "MainPage 2";
- Content = new StackLayout
- {
- Children = {
- nextPageButton,
- previousPageButton
- }
- };
- }
- async void OnNextPageButtonClicked(object sender, EventArgs e)
- {
- await Navigation.PushAsync(new MainPage3());
- }
-
- async void OnPreviousPageButtonClicked(object sender, EventArgs e)
- {
- await Navigation.PopAsync();
- }
- }
- }
Step 4
In this step, add a new class named MainPage3 and add the following code.
CS code
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xamarin.Forms;
-
-
- namespace NavigtionHirechical
- {
- class MainPage3 : ContentPage
- {
-
- public MainPage3()
- {
- var nextPageButton = new Button { Text = "Next Navigation", VerticalOptions = LayoutOptions.CenterAndExpand };
- nextPageButton.Clicked += OnNextPageButtonClicked;
-
- var previousPageButton = new Button { Text = "Previous MainPage2", VerticalOptions = LayoutOptions.CenterAndExpand };
- previousPageButton.Clicked += OnPreviousPageButtonClicked;
-
- Title = "Page 2a";
- Content = new StackLayout
- {
- Children = {
- nextPageButton,
- previousPageButton
- }
- };
- }
- async void OnNextPageButtonClicked(object sender, EventArgs e)
- {
- await Navigation.PushAsync(new NavigationPage1());
- }
-
- async void OnPreviousPageButtonClicked(object sender, EventArgs e)
- {
- await Navigation.PopAsync();
- }
-
- }
- }
Step 5
Now, add another new class named NavigationPage1. Here is the code for this class.
CS code
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xamarin.Forms;
-
-
- namespace NavigtionHirechical
- {
- class NavigationPage1 : ContentPage
- {
- public NavigationPage1()
- {
- var previousPageButton = new Button { Text = "Previous MainPage", VerticalOptions = LayoutOptions.CenterAndExpand };
- previousPageButton.Clicked += OnPreviousPageButtonClicked;
-
- var rootPageButton = new Button { Text = "Return to Root MainPage", VerticalOptions = LayoutOptions.CenterAndExpand };
- rootPageButton.Clicked += OnRootPageButtonClicked;
-
- var insertPageButton = new Button
- {
- Text = "Insert Page 2a Before Page 3",
- VerticalOptions = LayoutOptions.CenterAndExpand
- };
- insertPageButton.Clicked += OnInsertPageButtonClicked;
-
- var removePageButton = new Button { Text = "Remove MainPage 2", VerticalOptions = LayoutOptions.CenterAndExpand };
- removePageButton.Clicked += OnRemovePageButtonClicked;
-
- Title = "Final Page";
- Content = new StackLayout
- {
- Children = {
- previousPageButton,
- rootPageButton,
- insertPageButton,
- removePageButton
- }
- };
- }
-
- async void OnPreviousPageButtonClicked(object sender, EventArgs e)
- {
- await Navigation.PopAsync();
- }
-
- async void OnRootPageButtonClicked(object sender, EventArgs e)
- {
- await Navigation.PopToRootAsync();
- }
-
- void OnInsertPageButtonClicked(object sender, EventArgs e)
- {
- var page2a = Navigation.NavigationStack.FirstOrDefault(p => p.Title == "Page 2a");
- if (page2a == null)
- {
- Navigation.InsertPageBefore(new MainPage3(), this);
- }
- }
-
- void OnRemovePageButtonClicked(object sender, EventArgs e)
- {
- var page2 = Navigation.NavigationStack.FirstOrDefault(p => p.Title == "Page 2");
- if (page2 != null)
- {
- Navigation.RemovePage(page2);
- }
- }
- }
- }
Step 6
After the design view creation, go to Solution Explorer >> HierarchicalNavigation(PCL) >> click to open App.xaml.cs. The code is given below.
CS code
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- using Xamarin.Forms;
-
- namespace NavigtionHirechical
- {
- public partial class App : Application
- {
- public App()
- {
- InitializeComponent();
-
- MainPage = new NavigationPage(new MainPage1());
- }
-
- protected override void OnStart()
- {
-
- }
-
- protected override void OnSleep()
- {
-
- }
-
- protected override void OnResume()
- {
-
- }
- }
- }
Step 7
Click 'F5' or "Build " to 'Run' your application. Running this project, you will have the result like below.
Finally, we have successfully created a Xamarin.Forms Hierarchical Navigation Application.