Mega Code Archive

 
Categories / C# / WPF
 

Markup for navigation transition animations

<Window x:Class="AnimateNavigateTransitions.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="AnimateNavigateTransitions" Height="300" Width="300">   <Window.Resources>     <Storyboard x:Key="transitionAnimation" TargetName="transitionPlaceholder">       <DoubleAnimation Storyboard.TargetProperty="Opacity"                        From="1" To="0" DecelerationRatio="1"                        Duration="0:0:0.4" />     </Storyboard>   </Window.Resources>   <StackPanel>     <Frame Name="mainFrame" Source="Page1.xaml" />     <Canvas Name="transitionPlaceholder" IsHitTestVisible="False" />   </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Windows.Navigation; using System.Windows.Media.Animation; namespace AnimateNavigateTransitions {     public partial class Window1 : System.Windows.Window     {         VisualBrush lastPageBrush;         public Window1()         {             InitializeComponent();             mainFrame.Navigating += new System.Windows.Navigation.NavigatingCancelEventHandler(mainFrame_Navigating);             mainFrame.Navigated += new NavigatedEventHandler(mainFrame_Navigated);         }         void mainFrame_Navigating(object sender, NavigatingCancelEventArgs e)         {             Page lastPage = mainFrame.Content as Page;             if (lastPage == null){                 lastPageBrush = null;                return;             }             lastPageBrush = new VisualBrush(lastPage);             lastPageBrush.Viewbox = new Rect(0, 0, lastPage.ActualWidth,lastPage.ActualHeight);             lastPageBrush.ViewboxUnits = BrushMappingMode.Absolute;             lastPageBrush.Stretch = Stretch.None;             Point pageOffset = lastPage.TransformToVisual(this).Transform(new Point());             transitionPlaceholder.Margin = new Thickness(pageOffset.X, pageOffset.Y,0, 0);         }         void mainFrame_Navigated(object sender, NavigationEventArgs e)         {             if (lastPageBrush == null){                return ;             }                 transitionPlaceholder.Background = lastPageBrush;             lastPageBrush = null;             Storyboard sb = (Storyboard) FindResource("transitionAnimation");             sb.Begin(this);         }     } }