[UWP小白日记-6]页面跳转过度动画
前言
在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪.
再后来发现,页面进入和出去动画是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]页面跳转过度动画的更多相关文章
- [UWP小白日记-9]页面跳转过度动画(二)
又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...
- [UWP小白日记-3]记账项目-1
学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放 ...
- [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)
前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...
- [UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)
瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子 ...
- [UWP小白日记-15]在UWP手机端实时限制Textbox的输入
说实话重来没想到验证输入是如此的苦逼的一件事情. 网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...
- [UWP小白日记-8]一些零碎的东西
设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...
- [UWP小白日记-12]使用新的Composition API来实现控件的阴影
前言 看了好久官方的Windows UI Dev Labs示例好久才有点心得,真是头大.(其实是英语幼儿园水平(⊙﹏⊙)b) 真的网上关于这个API的资料可以说几乎没有. 正文 首先用这东西的添加WI ...
- [UWP小白日记-10]程序启动屏(ios解锁既视感)
讲一下 微软爸爸的开发者大会2016又暴了个表达式动画和Windows.UI.Composition的API,好叼的样子. 官方示例库GitHub 目前是懵逼状态,好复杂.脑细胞已经在地府排队了. ( ...
- [UWP小白日记-5]转换MVA学院的XML字幕为SRT
开源地址:第二版开源地址GIT 暂时用不了了,在最新的WIN10 10586.494系统上回闪退,正在酝酿第二版 O(∩_∩)O哈哈~ 新版已经完工:第二版 地方MVA上好多教程,但是微软的所有中国网 ...
随机推荐
- [转]Bypassing iOS security
src: http://blog.thireus.com/tag/kernelcache Before going further it is important to enumerate some ...
- 调WScript.Shell时报错:Automation 服务器不能创建对象
我们经常需要通过生成ActiveXObject("WScript.Shell");来调某一exe文件, 如 //设置网页打印的页眉页脚为空 var HKEY_Root,HKEY_P ...
- Hibernate之AbstractEntityPersister
Hibernate开发中需要根据持久层对象获取所映射的数据库表相关信息,如表名,主键,外键对象等相关系. Hibernate配置 Hibernate.cfg.xml <?xml version= ...
- match in shell scripts
for iter_ in $(seq 1 $END); do strLabel=`expr $i \* 200` echo $strLabel done
- 关于SqlDataAdapter的使用
原文传送门 如果使用SqlDataAdapter来查询数据返回给DataSet或者DataTable时需要注意以下几点:1.如果SqlDataAdapter的SelectCommand的连接并没有打开 ...
- jQuery Mobile (中)
jQuery Mobile (中) 前言 昨天我们一起学习了一部分jquery mobile的知识,今天我们继续. 这些是些很基础的东西,有朋友觉得这个没有其它的好,但是学习下不吃亏嘛,我反正也不会一 ...
- angularJS自定义 过滤器基础
先写个简单的例子,该过滤器是指定规定的字符串长度: html: <div ng-app="app" ng-controller="ctrl"> &l ...
- SSM整合案例(Spring+Struts+Mybatis)
项目目录结构 第一步:创建数据库和数据表 CREATE DATABASE IF NOT EXISTS mybatis; USE mybatis; CREATE TABLE t_user ( ) NOT ...
- PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较 转自#冰雪傲骨#
PHP中file_exists与is_file.is_dir的区别,以及执行效率的比较 判断文件是否存在,有2个常用的PHP函数:is_file 和 file_exists, 判断文件夹是否存在, ...
- Python第一天 安装 shell 文件
Python第一天 安装 shell 文件 python里面一切都是对象 object 代码缩进:建议用四个空格来缩进,不要用tab键 安装 Linux自带python,windows需要下载m ...