URI Mapping in Silverlight Navigation Framework

No.of Views1248
Bookmarked0 times
Downloads 
Votes0
By  dpatra   On  16 Feb 2010 00:02:00
Tag : Silver Light and XAML , How to
URI Mapping in Silverlight Navigation Framework
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

Introduction

Navigation Framework comes with Silverlight 3 RIA Services. Using this framework we can easily navigate between User Controls in a Silverlight Application. We can enable the Browser History capabilities and URI mappings can also be done.
To start with, we will build a simple Silverlight Application which will be easy to catch up.

Create Silverlight Navigation Application

Create a Navigation Application and name it NavigationFrameworkSample. The following screenshots will guide you through the process.

Image Loading...

Figure 1.1 Creating a Silverlight Navigation Application

Image Loading....

Figure 1.2 Enabling the RIA Features by Linking the web page

Image Loading....

Figure 1.3 Solution explorer

Here MainPage.xaml will work as our master page, which will carry the common elements for the whole projects. Now we will redesign the template to our simple use. It will look like the following. Using Blend 3 I have tried to change the template a bit; you can explore your own creativity.

Image Loading.....

Figure 1.4 Changed MainPage.xaml in Blend 3

XAML Code


{codecitation class="brush: xml; gutter: true;" width="650px"}

<UserControl x:Class="NavigationFrameworkSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="0.107*"/>
<RowDefinition Height="0.893*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.26*"/>
<ColumnDefinition Width="0.74*"/>
</Grid.ColumnDefinitions>
<Border Grid.Row="1" Style="{StaticResource FrameInnerBorderStyle}">
<StackPanel >
<Button Click="NavButton_Click" Tag="/Views/HomePage.xaml" Content="Home"
Style="{StaticResource PageLinkStyle}"/>
<Button Click="NavButton_Click" Tag="/Views/AboutPage.xaml" Content="About"
Style="{StaticResource PageLinkStyle}"/>
</StackPanel>
</Border>
<Border Grid.Column="1" Grid.Row="1" BorderBrush="#FF000000" Style="{StaticResource FrameContainerStyle}" Margin="0,0,0,-4">
<navigation:Frame x:Name="Frame" Source="/Views/HomePage.xaml"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
Padding="15,10,15,10"
Background="White"/>
</Border>
<TextBlock Grid.Column="1" FontSize="22" VerticalAlignment="Center" HorizontalAlignment="Center" Text="Navigation Framework" TextWrapping="Wrap"/>
</Grid>
</UserControl>

{/codecitation}

Navigation Page

Navigation Framework has its own Page that is called navigation Page. Which we will see further. Navigation Framework’s Views Folder consists of the Xaml Pages that are related to the project. In this sample application we have two Xaml Pages, Home.xaml and About.Xaml.

Image Loading....Image Loading....

Figure 1.5 Other Pages in Views Folder

Xaml Code for Home Page

{codecitation class="brush: xml; gutter: true;" width="650px"}

<navigation:Page x:Class="NavigationFrameworkSample.HomePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Title="HomePage ">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<TextBlock Text="Home" FontSize="20"/>
<StackPanel>
<TextBlock Text="Navigation Framework in Silverlight 3" />
</StackPanel>
</StackPanel>
</Grid>
</navigation:Page>

{/codecitation}

Xaml Code for About Page

{codecitation class="brush: xml; gutter: true;" width="650px"}

<navigation:Page x:Class="NavigationFrameworkSample.AboutPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Title="AboutPage ">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<TextBlock Text="About" FontSize="20"/>
<TextBlock Text="Navigation Framework is all about Navigating between User Controls"/>
</StackPanel>
</Grid>
</navigation:Page>

{/codecitation}

As soon as we create the Navigation Application, System.Windows.Controls.Navigation.DLL is added to the project’s reference.
In Navigation framework we have a control called Frame, which can load a Page into this. It has the same concept as Frame in ASP.NET.

To navigate through the pages we will use the following default logic of the framework.

{codecitation class="brush: csharp; gutter: true;" width="650px"}


private void NavButton_Click(object sender, RoutedEventArgs e)
{
Button navigationButton = sender as Button;
String goToPage = navigationButton.Tag.ToString();
this.Frame.Navigate(new Uri(goToPage, UriKind.Relative));
}
{/codecitation}

URI Mapping

This concept is new in Silverlight 3 Navigation Framework. Using this concept we can hide our Xaml page’s location and we can achieve security.
To achieve the above said, we need to do a trick in our App.xaml. We need to add the System.Windows.Controls.Navigation.dll to the xaml and change as follows: Change the default namespace.


Before

{codecitation class="brush: xml; gutter: true;" width="650px"}

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

{/codecitation}

After

{codecitation class="brush: xml; gutter: true;" width="650px"}

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

{/codecitaion}
Now we are enabled to write the URI Mappings. Write the following as per your requirement.

{codecitation class="brush: xml; gutter: true;" width="650px"}

<navigationCore:UriMapper x:Key="uriMapper">
<navigationCore:UriMapping Uri="Home" MappedUri="/Views/HomePage.xaml"/>
<navigationCore:UriMapping Uri="About" MappedUri="/Views/AboutPage.xaml"/>
</navigationCore:UriMapper>

{/codecitation}


Change the Following tag in Button

{codecitation class="brush: csharp; gutter: true;" width="650px"}


<Button Click="NavButton_Click" Tag="Home" Content="Home" Style="{StaticResource PageLinkStyle}"/>
<Button Click="NavButton_Click" Tag="About" Content="About" Style="{StaticResource PageLinkStyle}"/>

{/codecitation}

Now we can change the path to our Uri anywhere in the project, like we used it in our startup page in MainPage.xaml. We can now change the source attribute of the Frame.

{codecitation class="brush: xml; gutter: true;" width="650px"}


Source="Home"

{/codecitation}
Now we are ready to test our Sample and using this framework we enabled our browser history capability by default, that means now we can do Back and Forward for our required destination pages. The following screenshots will guide you through.

Image Loading...

Figure 1.6 Running the Application

Image Loading...

Figure 1.7 Typing the URI after # and getting the page

Image Loading....


Figure 1.8 Browser Histories in IE.

About the Author


Diptimaya Patra

Description :I am a Master in Computer Application (MCA) from SRM University, Chennai. I am MCTS in ASP.Net Web Development, and MOSS 2007 Administration. I have extreme exposure to Microsoft Technologies in recent times like Silverlight 2, Silverlight 3. I am from Cuttack, Orissa. You can reach me using this mail (diptimaya.patra@gmail.com). Currently I am working as a Software Engineer in UST Global Inc in Trivandrum Center.

Occupation :Software Engineer
Company : UST Global.
Location : India
Follow me at twitter : http://twitter.com/dpatra


 
Sign Up to vote for this article
 
About Author
 
dpatra
Occupation-Not Provided
Company-Not Provided
Member Type-Expert
Location-Not Provided
Joined date-13 Jul 2009
Home Page-Not Provided
Blog Page-Not Provided
 
 
Other popularSectionarticles
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top