前言

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

再后来发现,页面进入和出去动画是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. last error : SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate veri

    今天在用搜狐提供的邮件群发系统的sdk,做发送邮件的测试时,提示: last error : SSL certificate problem, verify that the CA cert is O ...

  2. iOS制作Static Library(静态库),实现多工程的连编

    在iOS开发中,我们会发现一些偏底层或基础代码是直接可以复用的,当我们换一个项目,改变的只需要是偏上层的业务逻辑代码,所以我们可以把这部分基础代码制作为一个静态库static library,并不断扩 ...

  3. C# 根据时间创建文件夹

    string file = ((fileNameIndex)index).ToString(); if (!Directory.Exists(HttpContext.Current.Server.Ma ...

  4. ORA-12520错误解决方法

    ORA-12520监听程序无法为请求的服务器类型找到可用的处理程序 以下不知道是不是解决方法的方法,因为我只重启下oracle服务就好了,并没进行任何修改 引用别人的文章: 1)数据库是专用服务器,但 ...

  5. Nginx安装配置与HelloWorld

    <深入理解Nginx>阅读与实践(一):Nginx安装配置与HelloWorld 最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码 ...

  6. Python Redis 数据复制.

    1 > 下载Python操作Redis的客户端 https://pypi.python.org/pypi/redis/2.7.6 下载完成后,参考该网站相关命令,执行安装. 2 > 下载 ...

  7. C Socket初探

    C Socket初探 前段时间写了个C# Socket初探,这次再写个C语言的Socket博文,运行效果如下: 实现步骤: 1. Server端 #include <stdio.h> // ...

  8. Bitmap的读写

    Bitmap的读写和几个小儿科的滤镜效果~ 闲来玩玩图像处理,拿破仑说过:“不想自己实现滤镜的美工不是好程序员~~#@!*^...#&!@......”  因为在学校做过很多美工的工作,而且从 ...

  9. Android NDK 开发中 adb logcat 命令的使用

    一.LogCat 存储在一个叫做 circular memory buffers 的缓冲中. 平时常用的都是通过eclipse 自带的 logcat 插件查看 logcat ,其实也可以通过命令来导出 ...

  10. [置顶] Java开源代码研究总结

          由于工作中的需要,最近在研究SNMP协议和利用snmp4j和snmp4j.agent(   http://www.snmp4j.org/ ),实现snmp的南向和北向功能. 结合以前看过的 ...