[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,复制-发布 发布 ...
- Forget Java to learn Javascript from 0.--Preface
I'm going to start to learn Javascript in this month. Someone told me you can't learn another langua ...
- ArcGIS 10.1 发布使用ArcEngine自定义的GP服务
1. 新建立GP模型 在VS2010中新建一个普通的程序及,引入ArcEngine相关的dll.在该DLL中定义一个或多个GP类和一个GP工厂类.GP类要继承IGPFunction2接口,GP工厂类要 ...
- Ruby on rails3
Ruby on rails初体验(三) 继体验一和体验二中的内容,此节将体验二中最开始的目标来实现,体验二中已经将部门添加的部分添加到了公司的show页面,剩下的部分是将部门列表也添加到公司的显示 ...
- [转] iOS ABI Function Call Guide
source: apple ARMv6 Function Calling Conventions When functions (routines) call other functions (sub ...
- 企业架构研究总结(44)——企业架构与建模之Archimate视图和视角
3. ArchiMate的视角与视图 创建.维护一个企业架构是一件非常复杂繁琐的事情,因为这项工作需要面对许多背景.利益各异的干系人,对他们所关注的问题进行解答,并能够在他们之间形成无障碍的沟通流.为 ...
- .Net 异步随手记(二)
Task.ContinueWith 这货,和 await 一样有“陷阱”.^^,因为写 ContinueWith 不能直观如人的“过程性”思维,写在 ContinueWith 括号里的部分不一定只在发 ...
- WPF专业编程指南 - 那些根元素<>的解释
<Window x:Class="Chapter1_WpfApplication1.MainWindow" xmlns="http://schemas.micros ...
- 迟到的 WPF 学习 —— 控件
这一章书中内容比较多而杂,但每个对象的内容又相对简短,所以只挑选里边有代表性的内容做记录. 1. Label 控件:一个基础的简单的 ContentControl,Labe 支持快捷键文本的设置,可以 ...
- 运用Unity实现依赖注入[结合简单三层实例]
运用Unity实现依赖注入[结合简单三层实例] 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接 ...