How can i navigate one xaml page to another?

c#-4.0, silverlight, silverlight-4.0, xaml

Solution

Like AnthonyWJones said you need to use the navigation framework.

First you'll need to add a reference to `System.Windows.Controls.Navigation` in your project and refernce it in you MainPage.xaml

xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"

Then you'll need a frame within where you'll switch different XAML pages. Something like this:

<navigation:Frame x:Name="navFrame" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Source=”/Views/First.xaml” />

Now somewhere in MainPage.xaml you could have a Button with a tag

`<Button Click="Button_Click" Tag="/Views/Second.xaml" Content="Second" />`

and in the `Button_Click` eventhandler you could switch out the content showed in `navFrame`.

private void Button_Click(object sender, RoutedEventArgs e)
{
    Button theButton = sender as Button;
    string url = theButton.Tag.ToString();

    this.navFrame.Navigate(new Uri(url, UriKind.Relative));
}

A cool thing to note is that by using NavigationFramework the browser back and forward buttons work perfectly and the URL in the addressbar updates depending on the XAML page you are currently on :)

Problem

i have 2 page i need to navigate mainpage.xaml to login.page xaml but it throws me Object reference not set to an instance of an object. in Root.Children.Clear();.... i added this codes in App.xaml: ``` private void Application_Startup(object sender, StartupEventArgs e) { Grid myGrid = new Grid(); myGrid.Children.Add(new MainPage()); this.RootVisual = myGrid; } ``` and than i adde some codes on main.xaml to navigate to LoginUI.xaml ``` namespace Gen.CallCenter.UI { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); Grid Root = ((Grid)(this.Parent)); Root.Children.Clear(); Root.Children.Add(new LoginUI()); } } } ``` How can i navigate main.xaml to LoginUI.xaml ?

Original source