views:

59

answers:

1

Hey Guys

I converted all my existing Silverlight app UserControls to Pages so I could use the Navigation Framework.

Anyway so I created a UserControl called MyFrame, which would host all the pages. In my App.xaml.cs I have the following to make sure that MyFrame is loaded when the App loads:

private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new MyFrame();
}

My UriMapper class resides in App.xaml and looks like the following:

<navcore:UriMapper x:Key="uriMapper">
    <navcore:UriMapping Uri="Login" MappedUri="Login.xaml">
</navcore:UriMapper>

Within my 'MyFrame' class, I have the following

<StackPanel Orientation="Horizontal">
    <StackPanel Orientation="Vertical">
        <HyperlinkButton Tag="Login" Content="Login" Click="HyperlinkButton_Click" />
    </StackPanel>
    <StackPanel Orientation="Vertical">
        <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" />
     </StackPanel>
 </StackPanel>

And within the callback for my HyperlinkButton's event handler, I have the following:

private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
    ContentFrame.Navigate(new Uri((sender as HyperlinkButton).Tag.ToString(), UriKind.Relative));
}

The Login.xaml file is in my root folder (right under Project). This navigation does not seem to work! The exception I get reads like so:

Navigation is only supported to relative URIs that are fragments, or begin with '/', or which contain ';component/'. Parameter name: uri

The Login page does not load. There is no problem with Login.xaml as when I set

this.RootVisual = new Login();

the page loads just fine.

I also tried setting the NavigateUri attribute of the HyperlinkButton to "Login." No cigar.

I'll appreciate any help!

Thanks a lot in advance

A: 

Okay turns out that explicitly setting the UriMapper property of the Frame resolves this issue. Looks like the UriMapper was not being initialized and associated with the Frame.

 <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" UriMapper="{StaticResource uriMapper}"/>

The above solves the problem.

Silver Gun