Click here to Skip to main content
12,883,272 members (35,453 online)
Click here to Skip to main content
Add your own
alternative version


34 bookmarked
Posted 21 Jul 2009

Silverlight Page Flip Navigation

, , 21 Jul 2009 CC (ASA 2.5)
Rate this:
Please Sign up or sign in to vote.
It describes page to page navigation with flip animation in Silverlight


This article describes how to navigate between pages with flip animation in Silverlight.

Using the Code

The flip animation can be done with the help of PlaneProjection from the namespace System.Windows.Media. You must use the below code snippet in all the XAML pages that needs the flip animation:

   <PlaneProjection x:Name="Projection"/>

And in the code base, add a double animation storyboard to flip the page: 

DoubleAnimation daY1 = new DoubleAnimation { From = 0.00, To = 90.00 };
Storyboard.SetTargetName(daY1, "Projection");
Storyboard.SetTargetProperty(daY1, new PropertyPath("RotationX"));
this.Resources.Add("EndOfPage", stb1);
Storyboard stb = new Storyboard();
stb.Duration = new Duration(TimeSpan.FromSeconds(1));
stb.SpeedRatio = 3;
DoubleAnimation daY = new DoubleAnimation { From = -90.00, To = 0.00 };
Storyboard.SetTargetName(daY, "Projection");
Storyboard.SetTargetProperty(daY, new PropertyPath("RotationX"));
this.Resources.Add("StartOfPage", stb);

And use this method to navigate from page to page:

public void SwitchToPage(UserControl p)
    NextPage = p;
    if (CurrentPage != p)
        Storyboard currStb = CurrentPage.Resources["EndOfPage"] as Storyboard;
        currStb.Completed += new EventHandler(currStb_Completed);


  • 21st July, 2009: Initial post


This article, along with any associated source code and files, is licensed under The Creative Commons Attribution-ShareAlike 2.5 License


About the Authors

Venkatesan Jagadisan
Software Developer iSOFT
India India
Working as a Software Engineer in iSOFT at Chennai, India.

Balaji Ganesaan
Software Developer (Senior) iSOFT
India India
Working as a Senior Software Engineer in iSOFT at Chennai, India.

You may also be interested in...

Comments and Discussions

BugI need Help with public void SwitchToPage(UserControl p) in Pin
der22018-Aug-11 20:11
memberder22018-Aug-11 20:11 
GeneralMy vote of 2 Pin
Michael Eber31-Dec-09 7:51
memberMichael Eber31-Dec-09 7:51 
GeneralMy vote of 1 Pin
waletzky15-Sep-09 16:20
memberwaletzky15-Sep-09 16:20 
QuestionExcellent Article,but one question! Pin
GomathiR25-Aug-09 1:06
memberGomathiR25-Aug-09 1:06 
AnswerRe: Excellent Article,but one question! Pin
kamrajj25-Aug-09 3:18
memberkamrajj25-Aug-09 3:18 
GeneralRe: Excellent Article,but one question! Pin
GomathiR25-Aug-09 20:39
memberGomathiR25-Aug-09 20:39 
QuestionGood work but i dont know what am I missing Pin
kamrajj24-Aug-09 0:00
memberkamrajj24-Aug-09 0:00 
Generaldocumentation please Pin
TJDOAD12-Aug-09 11:04
memberTJDOAD12-Aug-09 11:04 
Generalcool code Pin
forgetuu11-Aug-09 17:54
memberforgetuu11-Aug-09 17:54 
GeneralMy vote of 1 Pin
positronvx27-Jul-09 22:15
memberpositronvx27-Jul-09 22:15 
GeneralMy vote of 1 Pin
Michael E. Jones27-Jul-09 21:33
memberMichael E. Jones27-Jul-09 21:33 
GeneralRe: My vote of 1 Pin
jasenschmidt3-Aug-09 19:29
memberjasenschmidt3-Aug-09 19:29 
This posting is not really all the valid, if you are going to use the same animation for all the pages. Then you only need to have the MainPage.xaml contain the following:
<UserControl x:Class="SilverlightFlipNavigation.MainPage"
    Width="auto" Height="auto">
    <Grid x:Name="LayoutRoot" Opacity="1"> 
            <ColumnDefinition Width="0.167*"/>
            <ColumnDefinition Width="0.681*"/>
        <Border BorderBrush="#FF2DA2AC" BorderThickness="3,3,3,3" VerticalAlignment="Stretch" CornerRadius="5,5,5,5" Background="{x:Null}" Margin="0,0,0,0" Opacity="1"/>
        <StackPanel Grid.Column="0" Margin="10,10,10,10" >
            <Button Content="Page 1" Margin="0,10,0,10" Click="Button1_Click"></Button>
            <Button Content="Page 2" Margin="0,10,0,10" Click="Button2_Click"></Button>
            <Button Content="Page 3" Margin="0,10,0,10" Click="Button3_Click"></Button>
            <Button Content="Page 4" Margin="0,10,0,10" Click="Button4_Click"></Button>
        <Border Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" BorderBrush="#FF2DA2AC" BorderThickness="3,3,3,3" Background="{x:Null}" CornerRadius="5,5,5,5">
            <Grid x:Name="PageContainer" RenderTransformOrigin="0.212,0.857" Margin="3,3,3,3">
                    <PlaneProjection x:Name="PageContainerProjection"/>

The other pages would have to have the following:
<UserControl x:Class="SilverlightFlipNavigation.Page3"
    Width="Auto" Height="Auto">
	<Grid x:Name="LayoutRoot" Background="Gray">
		<TextBlock Text="Page 3" FontSize="20"></TextBlock>

This removes the need to have the PlaneProjection in each of the pages and therefore you can remove the code from each of the the Page{number}.xaml.cs files

The only thing that you would need to change in the current code is the way the resources are accessed before call begin on the animation and that would be to use the MainPage's resources instead of calling CurrentPage and NextPage

example Storyboard stb = NextPage.Resources["StartOfPage"] as Storyboard; becomes Storyboard stb = this.Resources["StartOfPage"] as Storyboard;
GeneralMy vote of 2 Pin
lneir27-Jul-09 15:48
memberlneir27-Jul-09 15:48 
GeneralCool code, not so cool article Pin
blackjack215021-Jul-09 20:43
memberblackjack215021-Jul-09 20:43 
Generalexcellent Pin
arun123@poll21-Jul-09 20:23
memberarun123@poll21-Jul-09 20:23 
GeneralMy vote of 1 Pin
MW_Justin21-Jul-09 6:15
memberMW_Justin21-Jul-09 6:15 
GeneralRe: My vote of 1 Pin
Venkatesan Jagadisan21-Jul-09 7:18
memberVenkatesan Jagadisan21-Jul-09 7:18 
GeneralMy vote of 2 Pin
emilio_grv21-Jul-09 2:25
memberemilio_grv21-Jul-09 2:25 
GeneralRe: My vote of 2 Pin
Balaji Ganesaan21-Jul-09 19:02
memberBalaji Ganesaan21-Jul-09 19:02 
GeneralRe: My vote of 2 Pin
emilio_grv1-Jan-10 4:05
memberemilio_grv1-Jan-10 4:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170422.1 | Last Updated 21 Jul 2009
Article Copyright 2009 by Venkatesan Jagadisan, Balaji Ganesaan
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid