#14 – Page-Based Navigation
July 26, 2010 3 Comments
WPF applications can be structured as a collection of pages, with built-in navigation between pages. This is different from the more traditional (Win Forms) document-based model, where the application displays a main window and dialogs that pop up.
To create a page-based application, you use a Page object as the top-level container in your application, instead of Window.
<Page x:Class="WpfApplication7.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="Page1"> <Grid> <Label Content="This is a page, not a window." Height="28" HorizontalAlignment="Left" Margin="52,75,0,0" Name="label1" VerticalAlignment="Top" /> </Grid>
To make this page the main object loaded when the application starts, set the StartupUri attribute of your main Application:
<Application x:Class="WpfApplication7.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Page1.xaml"> </Application>
Notice that we now get a main window with navigation controls at the top.
But how to navigate between pages?
I’ll get to that topic at some point. Nothing yet.
To navigate from one page to another one way that I found is to use a button. In the codebehind you add using System.Windows.Navigation; so you can use the navigation control
private void Button_Click(object sender, EventArgs e)
{
this.NavigationService.Navigate(new Uri(“Menu.xaml”, UriKind.Relative));
}
The Uri is the .xaml file that you want to go to and if the file is in a folder you add the folder for example “MenuGroup/Menu.xaml”. Works from a window to a page, but if you want to call a window from a page you can use the folowinf snippet:
private void RegisterProfile_Click(object sender, EventArgs e)
{
new RegisterProfile().Show();
}
Where RegisterProfile is the name of the window that you want to call, and if it is in a folder you add the full path for example “new ProfileGroup.RegisterProfile().Show();”