[UWP小白日记-6]页面跳转过度动画

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

前言

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

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

  扯完了蛋╮( ̄▽ ̄)╭

正文

  想想的是这样的

  

  结果是这样的:  

  

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

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

    巨硬定义的一些动画:

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

<Page.Transitions>
        <TransitionCollection>
            <EntranceThemeTransition FromHorizontalOffset="-1000" 
                                     FromVerticalOffset="0"  />
        </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="432"
                             To="0"
                             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="0"
                             To="432"
                             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);
        }
View Code

  理想是丰满的,显示是骨感的,完全不执行动画,这是什么鬼.最后搞来搞去才知道,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!=0)
            {
                this.Frame.GoBack();
            }
            else
            {
                Frame.BackStack.Clear(); //清空导航记录
                Frame.Visibility = Visibility.Collapsed;
            }
            
        }
Completd

 

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

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

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

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

目录
相关文章
|
4月前
|
C# UED 开发者
WPF动画大揭秘:掌握动画技巧,让你的界面动起来,告别枯燥与乏味!
【8月更文挑战第31天】在WPF应用开发中,动画能显著提升用户体验,使其更加生动有趣。本文将介绍WPF动画的基础知识和实现方法,包括平移、缩放、旋转等常见类型,并通过示例代码展示如何使用`DoubleAnimation`创建平移动画。此外,还将介绍动画触发器的使用,帮助开发者更好地控制动画效果,提升应用的吸引力。
196 0
|
4月前
|
前端开发 容器
是你想要的CSS动画效果吗!附源码
是你想要的CSS动画效果吗!附源码
|
5月前
|
前端开发
网页设计04 WEB端按钮设计技巧,交互规范参考资料,点击事件,什么是3:1 ,3:1 的介绍,网页设计牵扯的知识整理成口诀
网页设计04 WEB端按钮设计技巧,交互规范参考资料,点击事件,什么是3:1 ,3:1 的介绍,网页设计牵扯的知识整理成口诀
|
7月前
超级好看动态视频引导页源码
超级好看动态视频引导页源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
47 0
超级好看动态视频引导页源码
|
7月前
|
前端开发 定位技术
百度地图开发如何自定义控件(无敌的解决办法)
百度地图开发如何自定义控件(无敌的解决办法)
60 0
百度地图开发如何自定义控件(无敌的解决办法)
|
机器学习/深度学习 算法 图形学
Unity小游戏——无限滚动的背景的改良
Unity小游戏——无限滚动的背景的改良
109 0
|
7月前
|
前端开发
前端知识笔记(二十)———简易弹窗制作
前端知识笔记(二十)———简易弹窗制作
71 0
Axure如何做到屏幕自适应
Axure如何做到屏幕自适应
402 0
|
前端开发
前端换肤,聊一聊主题切换那些事
前端换肤,聊一聊主题切换那些事
185 0
|
JSON iOS开发 数据格式
iOS开发 - 关于启动页动画的杂谈
iOS开发 - 关于启动页动画的杂谈
259 0
iOS开发 - 关于启动页动画的杂谈