[UWP小白日记-9]页面跳转过度动画(二)
又打算动手写了
[UWP小白日记-6]页面跳转过度动画
上次写的,这次随着学习的进度使用新的玩法。
最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写了好几次。
发条弹幕压压惊Σ(っ °Д °;)っ
正文
0.两个动画的定义
TIP:说明下这里的childrenFrameCompositeTransform这是给Frame的CompositeTransform的名字
以前从来不定义名字,应为有取名综合征。最近我又嫌弃这搞法太长,经常打字缺斤少两的。
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)"
现在短了多清爽
<!--#region 子框架进入动画-->
<Storyboard x:Name="childrenInStoryboard"
x:FieldModifier="public"
Completed="childrenInStoryboard_Completed">
<DoubleAnimation x:Name="childrenInDA"
Storyboard.TargetName="childrenFrameCompositeTransform"
Storyboard.TargetProperty="TranslateX"
To="0"
Duration="0:0:0.5">
<DoubleAnimation.EasingFunction>
<QuarticEase EasingMode="EaseIn"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
<!--#endregion-->
<!--#region 子框架退出动画-->
<Storyboard x:Name="childrenOutStoryboard"
x:FieldModifier="public"
Completed="childrenOutStoryboard_Completed">
<DoubleAnimation x:Name="childrenOutDA"
Storyboard.TargetName="childrenFrameCompositeTransform"
Storyboard.TargetProperty="TranslateX"
From="0"
Duration="0:0:0.5">
<DoubleAnimation.EasingFunction>
<QuarticEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
<!--#endregion-->
1.使用Frame本身就有的Navigating和navigated事件来执行开闭动画。
/// <summary>
/// childrenFrame导航开始前
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void childrenFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
childrenFrameCompositeTransform.TranslateX = 0;
//1.设置childrenFrame导航进入动画
EdgeUIThemeTransition inStoryoard = new EdgeUIThemeTransition();
//2.只有在导航是新实例才执行动画
if (e.NavigationMode == NavigationMode.New)
{
#region 系统定义的边缘UI
//inStoryoard.Edge = EdgeTransitionLocation.Right;
//TransitionCollection tc = new TransitionCollection();
//tc.Add(inStoryoard);
//childrenFrame.ContentTransitions = tc;
#endregion
#region 自定义动画
childrenInDA.From = this.ActualWidth;
childrenInStoryboard.Begin();
#endregion
}
}
/// <summary>
/// 导航结束
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void childrenFrame_Navigated(object sender, NavigationEventArgs e)
{
var tempPageE = e.Content as Page;
switch (tempPageE.Tag.ToString())
{
case "安全页面":
(childrenFrame.Content as SafePage).BackEvent += MainPage_BackEvent;
break;
default:
break;
}
}
2.在所有需要的退出的动画的页面实现BackEvert委托
例如:
public sealed partial class SafePage : Page
{
internal delegate void GoBackHandler();
internal event GoBackHandler BackEvent;
public SafePage()
{
this.InitializeComponent();
}
}
3.在MainPage.cs中实现MainPage_BackEvent
/// <summary>
/// 实现各个页面定义的委托
/// </summary>
private void MainPage_BackEvent()
{
//1.设置退出动画的TO属性
childrenOutDA.To = this.ActualWidth;
//2.动画开始
childrenOutStoryboard.Begin();
}
3.还有一点要在退出动画结束的时候重置一些数据
/// <summary>
/// childrenFrame退出动画结束
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void childrenOutStoryboard_Completed(object sender, object e)
{
childrenFrame.ContentTransitions = null;
childrenFrame.Content = null;
childrenFrame.SetNavigationState(navInfo);
childrenFrameCompositeTransform.TranslateX = 0;
}

顺手再来个双击退出
在Mainpage中注册后退管理事件
/// <summary>
/// MainPage载入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
//1.注册后退管理
SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
}
TIP:虽然SystemNavigationManager.GetForCurrentView().BackRequested是系统级别的事件最好是+=了就-=我这里没这么做。因为我这个是当全局来用的。APP退出了也就没那必要了不是。
bool IsExit = false;
/// <summary>
/// 响应后退按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
{
if (childrenFrame.Content != null)
{
e.Handled = true;
if (childrenFrame.CanGoBack)
{
childrenFrame.GoBack();
}
else
{
childrenOutDA.To = this.ActualWidth;
childrenOutStoryboard.Begin();
}
}
else
{
if (e.Handled == false)
{
if (IsExit)
{
//1.退出APP
Application.Current.Exit();
}
else
{
IsExit = true;
e.Handled = true;
ExitTipTextBlock.Text = "再按一次(,,•∀•)ノ゛ByeBye";
ExitTipBorder.Visibility = Visibility.Visible;
await Task.Delay(1500);
IsExit = false;
ExitTipBorder.Visibility = Visibility.Collapsed;
}
}
else
{
}
}
}
欢迎大家指点更好的方法。(o'ー'o)
这个办法在可以导航的时候时 执行的是childrenOutStoryboard动画,会导致在弹出页面中再次进行的导航后后退没有动画(按物理导航按钮时)
[UWP小白日记-9]页面跳转过度动画(二)的更多相关文章
- [UWP小白日记-6]页面跳转过度动画
前言 在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪. 再后来 ...
- [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上好多教程,但是微软的所有中国网 ...
随机推荐
- SQL Server 复制 - 发布订阅(SQL Server 数据同步)
原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...
- codeblock 设置背景颜色
今天觉得codeblock看着刺眼,想了想,能不能跟vs利用dark背景一样可以设置一个舒服的背景.于是就开始各种点击,各种摸索了. 1. 背景和各种颜色设置 不妨先说下vs中的设置是:工具(Tool ...
- 阿里云1218动态css3代码
See the Pen jEWpWm by kujian (@kujian) on CodePen. .room-nav { /* -webkit-animation:roomNavTranslate ...
- Ibatis.Net执行Sql超时commandTimeout的一个坑
项目中使用了Ibatis.Net,数据库是Mysql,在做一个批量Update的操作时,需要执行40几秒,在执行到30秒的时候,会抛出异常:Timeout expired , The timeout ...
- ajax的post请求
get和post是http请求方法最主要的两种方式. post: 来个例子test.html <!doctype html> <html lang="en"> ...
- DTD
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. 它使用一系列的合法元素来定义文档结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 内部的 DOCTYPE 声明 ...
- KMP算法详解-- 转自Matrix67
6 7 8 9 -- A = a b a b 6 7 7 8 9 -- A = a b a b a 5 6 7 8 9 -- A = a b a b a b 6 7 ...
- Apache指南:CGI动态页面
概要 相关模块 相关指令 mod_alias mod_cgi AddHandler Options ScriptAlias CGI(公共网关接口[Common Gateway Interface])定 ...
- JavaScript插件——标签页
JavaScript插件——标签页 前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.html ...
- 《cracking the coding intreview》——链表
前言 最近准备暑假回家回家修整一下,所以时间大部分用来完成项目上的工作,同时为了9月份的校招,晚上的时间我还在学习<cracking the coding intreview>,第二章链表 ...