《Page》制作页面间跳转动画步骤

在Windows Phone 应用程序中使用动画在页面中跳转可以起到很好的过渡效果,那要怎么让制作一个页面间的跳转动画那?

其实也面间的跳转动画制作步骤并的复杂,相对来说还很简单,步骤如下:

(1)截获任何表明用户正在离开当前页面的操作

(2)启动一个动画故事板来隐藏当前页面

(3)导航到下一个页面

(4)截获新页面的导航

(5)启动一个动画板来显示新页面

具体操作:

1、隐藏当前页面

当用户将要离开当前页面时,对其进行截获的一种方法是讲对Navigate方法的调用替换为对动画启动的调用。该方法的缺点是,如果用户有多种导航到另外一个页面的方式,那么你可能要在一个页面中多处位置执行次操作。另外一个方法就是重写OnNavigateionFrom方法并且取消导航,而调用动画故事板以便隐藏当前页面。当隐藏动画完成当前页面的隐藏之前,用户是无法离开该页面的。所以你要把用户将要导航到的URI记录下来,在动画结束时,再次调用Navigate方法。导航离开页面。

相关代码:

 1         //页面间跳转动画
 2         public Uri UriToNacigateTo { get; set; }
 3         public bool IsCurrentApp { get; set; }
 4         protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
 5         {
 6             base.OnNavigatingFrom(e);
 7             IsCurrentApp = e.IsNavigationInitiator;
 8             if (UriToNacigateTo == null)
 9             {
10                 e.Cancel = true;
11                 if (IsCurrentApp)
12                     UriToNacigateTo = e.Uri;
13                 this.HidePage.Begin();
14             }
15             else
16             {
17                 UriToNacigateTo = null;
18             }
19         }
20         private void HodePage_Completed(object sender, EventArgs e)
21         {
22             if (IsCurrentApp)
23                 this.NavigationService.Navigate(UriToNacigateTo);
24         }

2、显示新页面

一旦隐藏上一个页面并且加载了新页面,就可以按类似的过程显示动画了。你需要重写新页面的OnNavigatedTo方法,并启动一个可以显示页面内容的动画故事板:

1         protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
2         {
3             base.OnNavigatedTo(e);
4             this.DisplayPage.Begin();
5         }

3、动画故事板

用于隐藏当前页面的动画可以如下所示:

View Code
 1     <phone:PhoneApplicationPage.Resources>
 2         <!-- 页面间跳转动画 -->
 3         <Storyboard x:Name="HidePage" Completed="HodePage_Completed">
 4             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="phoneApplicationPage">
 5                 <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
 6                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="-480"/>
 7             </DoubleAnimationUsingKeyFrames>
 8             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="phoneApplicationPage">
 9                 <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
10                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="-800"/>
11             </DoubleAnimationUsingKeyFrames>
12         </Storyboard>
13         <Storyboard x:Name="DisplayPage">
14             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="phoneApplicationPage">
15                 <EasingDoubleKeyFrame KeyTime="0" Value="-480"/>
16                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
17             </DoubleAnimationUsingKeyFrames>
18             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="phoneApplicationPage">
19                 <EasingDoubleKeyFrame KeyTime="0" Value="-800"/>
20                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
21             </DoubleAnimationUsingKeyFrames>
22         </Storyboard>
23     </phone:PhoneApplicationPage.Resources>
24     <!-- 页面间跳转动画 -->
25     <phone:PhoneApplicationPage.RenderTransform>
26         <CompositeTransform/>
27     </phone:PhoneApplicationPage.RenderTransform>

相反,显示新页面的动画可能如下:

View Code
 1     <phone:PhoneApplicationPage.Resources>
 2         <Storyboard x:Name="DisplayPage">
 3             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="phoneApplicationPage">
 4                 <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
 5                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
 6             </DoubleAnimationUsingKeyFrames>
 7             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="phoneApplicationPage">
 8                 <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
 9                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
10             </DoubleAnimationUsingKeyFrames>
11             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="phoneApplicationPage">
12                 <EasingDoubleKeyFrame KeyTime="0" Value="-720"/>
13                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
14             </DoubleAnimationUsingKeyFrames>
15         </Storyboard>
16     </phone:PhoneApplicationPage.Resources>
17     <phone:PhoneApplicationPage.RenderTransform>
18         <CompositeTransform/>
19     </phone:PhoneApplicationPage.RenderTransform>

本例到此结束

 

posted @ 2012-05-25 16:46  ╰→劉じ尛鶴  阅读(364)  评论(0编辑  收藏  举报