微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

0 - 如何从Silverlight和WPF的XAML迁移至Windows Store Apps

Windows Store Apps的新特性

0.1 应用程序对象和应用模型

  • 应用程序模型启动和生命周期,并且生命周期事件只能在app.xaml.cs中进行编写,而不能由Application标签关联;
  • Windows.Current代表了当前的窗口,使用其CoreWindow属性可以获取该窗口的“句柄”,进而对窗口的属性和事件进行操作;
  • 获取程序包资源的方式,由原来Silverlight中的Application.GetResourceStream改为Package.Current.InstalledLocation,获得的是一个StorageFolder对象,使用该对象去加载文件,通常都是异步方法
  • 应用程序的启动方法不再只是通过tile启动,有可能通过文件关联的多种方法进行启动,在设计app时需要考虑多种启动模式,并做好相应的数据保存工作;

0.2 .NET编程和类型投射

.NET环境下的一些类型被投射到了Win RT中了,这些类型要么是来自System空间,要么被集成到Win RT的程序集中
  • 泛型集合接口,如IVector<T>(IList<T>),IMap<K,V>(IDictionary<TKey,TValue>)等投射关系;
  • Uri,投射为System.Uri,区别在于:System.Uri可以在初始化时指定Uri为Relative,但是Win RT中的Uri只能在初始化时通过指定FrameworkElement.BaseUri来得到相对Uri路径,如下所示:
    CapturedPhoto.source = new BitmapImage(new Uri(this.BaseUri,"Assets/placeholder-sdk.png"));
  • IReference<T>投射为INullable<T>,并且支持使用bool?表示可为空值得布尔值;

0.3 通用编程模型

  • 异步机制:async - await机制(TAP);
  • 跨线程更新界面:与以前一样,使用DependencyProperty.dispatcher;
  • 文件和存储区域的读写现在通过StorageFile等API进行操作;

0.4 页面导航

除去Grid App、Split App、以及Hub App(这些模板已经内建了导航和生命周期的功能)以外,现在Win RT Apps采用Frame类进行页面间的导航,

0.5 XAML操作

  • 使用using:取代clr-namespace:/assembly=;
  • 在某些情况下Setter.Property可能在Win RT下变得无效,需要指定其属主;

0.6 触摸和输入

  • 鼠标事件由Pointer事件取代;
  • 更应该使用手势(Gesture)事件,而不是Pointer事件;
  • 可以为控件选择禁止相应某些触摸事件,通常这对于组合控件中的触摸事件路由冒泡的控制很有用;
  • 对于一些已经有内建手势事件的控件来说(如ListView的滚动),可能屏蔽较低级的Pointer事件,但是内建触摸事件可以使用CancelDirectManipulations关闭

0.7 控件



最后还是要吐槽一句,WP7升级WP8坑惨了消费者,WP8升WP8.1坑惨了开发者,还是希望在经历这些转型的困难之后,局面能慢慢好起来。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐