设为首页 收藏本站
查看: 1173|回复: 0

《Windows Fun 7》 二:Windows Phone怎样实现一个水平切换Page的Transition

[复制链接]

尚未签到

发表于 2015-5-8 10:35:14 | 显示全部楼层 |阅读模式
  前言
  重置过Windows Phone 7手机的朋友,一定记得,重置之后第一件要做的事是设置语言,时区,时间,Live ID等信息。我们也一定记得那是一种水平切换的动画。当我们点击下一步时,页面从右向左滑动。有点类似iphone主页菜单的左右滑动效果。
  前段时间QQ群有人在问这种效果。这样的效果有时候会用到,比如街旁WP7客户端开始的引导用户使用的几个页面,类似教程,就可以做成这种效果。还有,如果需要在客户端注册,也可以把几个注册过程做成这样的效果,还有比如翻书的效果,也可以这样平移……
  我们可以看下一下效果,它是从右向左连贯的水平滑动,本篇就分析这样的思路以及实现原理,并给出源代码下载:
DSC0000.jpg
  
  1.你的思路
  如果我猜的没错,你已经有了大概的思路:设置一个Canvas,按每个页面实际的位置布局,然后每次修改每个元素的Canvas.Left……
  确实,以前我也这么干过!
  这样虽然可行,但是有点显得我们不够专业,而且所有页面需要一次实例化,如果页面过多,那会影响第一次加载时间。
  那怎么办呢?不急,我们一步一步来慢慢分析。
  
  2.Silverlight中的简单导航
  切换,切换,切换,该怎么切换呢?
  想想,在Silverlight中,我们要由一个UI页面切换到另一个UI页面,在不借助Frame的时候,会怎么办呢。
  最简单的,就是将容器的Content给替换成另一个对象,没错就是这样。
  所以,页面切换的最简单模型就是,最外层放置一个ContentControl,第一次显示的时候给他的Content赋值一个页面实例,在用户点击导航按钮之后,用另一个页面实例替换。如下的模型:
DSC0001.jpg
  
  3.Frame+Page
  其实,没错啦,页面切换的基本模型就是这么简单。
  Silverlight提供了一个Frame+Page的导航模型,它其实仍然是这样的原理。我们首先看下Frame的定义:



   1:  public class Frame : ContentControl, INavigate
   2:  {
   3:     public bool CanGoBack { get; internal set; }
   4:     public bool CanGoForward { get; internal set; }
   5:     public Uri CurrentSource { get; internal set; }
   6:     public Uri Source { get; set; }
   7:     public UriMapperBase UriMapper { get; set; }
   8:     public event FragmentNavigationEventHandler FragmentNavigation;
   9:     public event NavigatedEventHandler Navigated;
  10:     public event NavigatingCancelEventHandler Navigating;
  11:     public event NavigationFailedEventHandler NavigationFailed;
  12:     public event NavigationStoppedEventHandler NavigationStopped;
  13:     public void GoBack();
  14:     public void GoForward();
  15:     public bool Navigate(Uri source);
  16:     public void StopLoading();
  17:  }
  Frame首先是一个ContentControl,那么每个Page就是一个页面了。不同的是不需要我们去替换Content,我们只需要指定一个XAML文件的地址,Frame会根据路径找到这个页面,然后实例化,然后自己替换它的Content。
  相比我们前面得出的最简单的模型,它仅仅是提供了一些导航事件,使得我们可以做出一些处理。
  我们看到,Frame模型简化了我们开发中的页面导航。还是很有用的。
  
  4.Windows Phone 7中的Transitions
  Nice!但是页面切换太突兀了,一下子就换过来,一点都不符合Silverlight的风格,Silverlight可是做动画的啊,Silverlight可是替换Flash的啊,为什么要像HTML一样导航呢。
  Windows Phone 7操作系统出来后,Metro横空出世,Metro强调流畅,强调平滑,强调每户的每个操作和响应都能通过一些视觉变换反馈给用户。因此,给Page之间的过度加入了Transition。
  不过默认的PhoneApplicationFrame并没有加入Transition的功能,我们需要去分析Toolkit里面的TransitionFrame代码。
  对TransitionFrame的分析以及将本实例转化为Frame的方式将会在下一篇分析。
  
  5.本示例代码分析
  本实例实际上来源于PDC大会上介绍Expression Blend 4时官方演示的源代码示例。其中我把导航的部分抽取出来。
  和Frame+Page的模型类似,本实例也由两部分组成:TransitionContentControl和SlideShow。其中TransitionContentControl类似于Frame的功能,而SlideShow类似于Page,不同的是SlideShow是继承于ItemsControl,它首先就会取得所有页面并实例化,这在页面多得时候不是很可取,后面我会将它进行改造。



   1:  public class TransitionContentControl : Control
   2:  {
   3:     private ContentControl currentWrappedContent = null;
   4:     private Grid grid = null;
   5:   
   6:     public Style TransitionStyle { get; set;}
   7:     public object Content{ get; set;}
   8:   
   9:     static void ContentPropertyChanged(object o, DependencyPropertyChangedEventArgs args);
  10:     static void TransitionStylePropertyChanged(object o, DependencyPropertyChangedEventArgs args); }

  和前面的Frame没有太大区别,神奇之处在于多了一个TransitionStyle依赖属性,这个Style也没什么区别,神奇之处在于多了一个LayoutStates



   1:  
   2:      
   3:         
   4:            
   5:               
   6:                  
   7:                     
   8:                        
   9:                        
  10:                        
  11:                     
  12:                     
  13:                        
  14:                     
  15:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-64912-1-1.html 上篇帖子: Windows 7 任务栏开发 之 覆盖图标(Overlay Icon) 下篇帖子: Windows Phone 7 开发 31 日谈——第6日:工具栏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表