前言

  在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪.

再后来发现,页面进入和出去动画是OK了,But 为毛导航在执行动画的时候背景不是前一个页面,而是系统的Light主题和Dark主题的颜色 (゚Д゚≡゚д゚)!? 查资料中……

  扯完了蛋╮( ̄▽ ̄)╭

正文

  想想的是这样的

  

  结果是这样的:  

  

  这是要逼死强迫症吗(ノಠ益ಠ)ノ彡┻━┻

  tips :其实巨硬已经定义了一些动画,偷懒的就直接用

    巨硬定义的一些动画:

    EntranceThemeTransition 可以控制水平和垂直移动的距离.

<Page.Transitions>
<TransitionCollection>
<EntranceThemeTransition FromHorizontalOffset="-1000"
FromVerticalOffset="" />
</TransitionCollection>
</Page.Transitions>

EntranceThemeTransition

      下面这种导航过度动画,可以查看下这位同学的@h82258652博客

<Page.Transitions>
<TransitionCollection>
<NavigationThemeTransition>
<NavigationThemeTransition.DefaultNavigationTransitionInfo>
<CommonNavigationTransitionInfo />
</NavigationThemeTransition.DefaultNavigationTransitionInfo>
</NavigationThemeTransition>
</TransitionCollection>
</Page.Transitions>-->

CommonNavigationTransitionInfo

当然,作为萌新,用来学习当然不能偷懒.

 <Page.Resources>
<Storyboard x:Name="stataStoryboard">
<DoubleAnimation Storyboard.TargetName="tablepage"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
From=""
To=""
Duration="0:0:0.6"> </DoubleAnimation>
</Storyboard><!--Completed="overStoryboard_Completed"-->
<Storyboard x:Name="overStoryboard" >
<DoubleAnimation Storyboard.TargetName="tablepage"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
From=""
To=""
Duration="0:0:0.6"> </DoubleAnimation>
</Storyboard>
</Page.Resources>

定义动画

  动画是改变RenderTransform.TranslateTransform的X的值,所以还的给Page添加一个TranslateTransform.

  动画里为什么没有

EnableDependentAnimation="True"

是否依赖UI线程

  也可以运行?

  应为UWP动画执行有2个线程:

   1.UI线程:直接用动画修改控件本身的属性那么必须把此值设置为true;

   2.构图线程:优点 大法新搞的据说性能更好,不阻塞UI.恩满满的优点啊.(亦可以说是后台线程)

  so,以后动画尽量用RenderTransform

<Page.RenderTransform>
<TranslateTransform/>
</Page.RenderTransform>

TranslateTransform

导航

  接下来使用Page导航中会触发的几个事件:OnNavigateTo,OnNavigateFrom ,没错就是这样,总感觉有什么不对呢

  进入page2的时候触发OnNavigateTo,然后在page2里重写.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
Storyboard tempStorboard = Resources["stataStoryboard"] as Storyboard;
tempStorboard.Begin(); base.OnNavigatedTo(e);
}

Page2

  接下来离开当前页面的时候触发OnNavigateFrom ,接着重写它.

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Storyboard tempStorboard1 = Resources["overStoryboard"] as Storyboard;
tempStorboard1.Begin(); base.OnNavigatedFrom(e);
}

  理想是丰满的,显示是骨感的,完全不执行动画,这是什么鬼.最后搞来搞去才知道,OnNavigateFrom 根本不会等你执行动画直接就跳走了,完全不甩你就是这么傲娇.

最后是这样的:在后退按钮事件中等overStoryboard动画执行完后出发它的Completed事件,再进行导航.

if (this.Frame.CanGoBack)
{
Storyboard tempStorboard1 = Resources["overStoryboard"] as Storyboard;
tempStorboard1.Begin();
}

后退按钮事件

private void overStoryboard_Completed(object sender, object e)
{
this.Frame.GoBack();
}

Completed

处理出现的Light和Dark主题背景色

  代码修改如下,暂时还没发现大问题,如果有朋友发现请给我留言,学习!

/// <summary>
/// 后退导航
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TablePageGoBackButton_Click(object sender, RoutedEventArgs e)
{
if (this.Frame.CanGoBack)
{
Storyboard tempStorboard1 = Resources["overStoryboard"] as Storyboard;
tempStorboard1.Begin();
}
else
{
Storyboard tempStorboard1 = Resources["overStoryboard"] as Storyboard;
tempStorboard1.Begin();
}
}

后退按钮事件

/// <summary>
/// overStoryboard动画执行完毕后触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void overStoryboard_Completed(object sender, object e)
{
if (Frame.BackStackDepth!=)
{
this.Frame.GoBack();
}
else
{
Frame.BackStack.Clear(); //清空导航记录
Frame.Visibility = Visibility.Collapsed;
} }

Completd

最后的疑问,怎么在2个Frame间传递数据,

当从系统的rootFrame切换到childrenFrame的时候,

怎么保存rootFrame的状态,让再次切回时还原rootFrame的状态

请知道的大神指点迷津.再次感激不尽!

[UWP小白日记-6]页面跳转过度动画的更多相关文章

  1. [UWP小白日记-9]页面跳转过度动画(二)

    又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...

  2. [UWP小白日记-3]记账项目-1

    学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放 ...

  3. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

  4. [UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)

    瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子 ...

  5. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入

    说实话重来没想到验证输入是如此的苦逼的一件事情.     网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...

  6. [UWP小白日记-8]一些零碎的东西

    设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...

  7. [UWP小白日记-12]使用新的Composition API来实现控件的阴影

    前言 看了好久官方的Windows UI Dev Labs示例好久才有点心得,真是头大.(其实是英语幼儿园水平(⊙﹏⊙)b) 真的网上关于这个API的资料可以说几乎没有. 正文 首先用这东西的添加WI ...

  8. [UWP小白日记-10]程序启动屏(ios解锁既视感)

    讲一下 微软爸爸的开发者大会2016又暴了个表达式动画和Windows.UI.Composition的API,好叼的样子. 官方示例库GitHub 目前是懵逼状态,好复杂.脑细胞已经在地府排队了. ( ...

  9. [UWP小白日记-5]转换MVA学院的XML字幕为SRT

    开源地址:第二版开源地址GIT 暂时用不了了,在最新的WIN10 10586.494系统上回闪退,正在酝酿第二版 O(∩_∩)O哈哈~ 新版已经完工:第二版 地方MVA上好多教程,但是微软的所有中国网 ...

随机推荐

  1. PHP的curl实现get,post 和 cookie(几个实例)

    类似于dreamhost这类主机服务商,是显示fopen的使用 的.使用php的curl可以实现支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE ...

  2. asp.net内部原理3

    asp.net内部原理(三) 第三个版本 (最详细的版本) 前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚 ...

  3. js框架漫谈

    现在实际项目中可供选择的javascript框架很多,热门的有jquery,dojo,mootools,ext等.这些框架按照不同的标准有不同的分类方法,比如按照扩展方式便可分为prototype式的 ...

  4. MyEclipse取消Show in Breadcrumb的方法

    eclipse中的Show in Breadcrumb是快速导航条,可以清晰的看到我们当前的类,属性或方法的导航 定位. 如果不喜欢的话,取消掉的方法如下: Window -> Customiz ...

  5. struts2讲义----建立一个struts2工程

    建立一个Struts2 工程 Ø 1在MyEclipse中新建web工程 Ø 2在struts-2.2.1.1-all\struts-2.2.1.1解压struts2-blank.war( 最基础的示 ...

  6. JAVA实现数据库数据导入/导出到Excel(POI)

    准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/poi/release/src/(重要) 如下 2.导入Java界面美 ...

  7. (Sql Server)数据的拆分和合并

    (Sql Server)数据的拆分和合并 背景: 今天遇到了数据合并和拆分的问题,尝试了几种写法.但大致可分为两类:一.原始写法.二.Sql Server 2005之后支持的写法.第一种写法复杂而且效 ...

  8. Android 手机进入不了fastboot模式的解决方案

    本方案仅针对linux terminal下刷手机img文件的情况: fastboot的通常流程如下:   adb reboot bootloader  //进入bootloader 模式  fastb ...

  9. 杨辉三角形II(Pascal's Triangle II)

    杨辉三角形II(Pascal's Triangle II) 问题 给出一个索引k,返回杨辉三角形的第k行. 例如,给出k = 3,返回[1, 3, 3, 1] 注意: 你可以优化你的算法使之只使用O( ...

  10. 典型的团队VS优秀团队

    如果做不了优秀的团队,那么就做一个典型的团队,公司需要这么一个神话,需要这么一个领头羊. 我在进入某公司后,第一个项目用的是"敏捷开发方法".而公司的理念恰恰是:开发.协作性强.扁 ...