zoukankan      html  css  js  c++  java
  • 把windows phone 7工程升级到windows phone 8

    导读:下文主要告诉你怎样把一个wp7的工程迁移到wp8上。目前还没有拿到真机,所有测试均针对模拟器进行

    1、开发环境

    windows phone 8(简称wp8)的开发环境需要64位windows 8,并安装wp8 sdk. sdk下载地址http://www.microsoft.com/en-us/download/details.aspx?id=35471

    也可以直接直接下载iso文件http://go.microsoft.com/fwlink/?LinkID=257234&clcid=0x409

    安装后桌面上将出现这个图标:

     VS Express for Windows Phone, 开发wp8程序就靠他了

    2、wp8简介

    关于wp8新功能介绍的文章很多了,本文只介绍和迁移工作相关的几点。

    1)分辨率

    wp7支持的分辨率为480*800

    wp8支持3种分辨率:480*800,768*1280(1.6倍),720*1280(1.5倍并加长80像素,或加长53像素再放大到1.5倍)。

    2)控件库。

    wp8中加入了一些新控件,例如之前存在于toolkit中的LongListSelector

    3)API变更

    wp8不支持部分wp7中的API了,例如获取用户ID的这个:UserExtendedProperties.GetValue("ANID")

    4)ResourceDictionary文件的规则变更

    wp8针对ResourceDictionary文件的一些解析规则比wp7更严格(或者说更弱)。

    例如在wp7中你可以这样写:(文件开头要加上命名空间定义    xmlns:sys="clr-namespace:System;assembly=mscorlib" )

       <sys:String x:Key="picurl1">/Images/pic1.png</sys:String>
       <ImageBrush x:Key="pageBgBrush" ImageSource="{StaticResource picurl1}" />

    在wp8中则不行。可以编译通过,但运行时将出错。因为ImageSource是一个ImageSource型的属性,wp8种并不能自动把string类型

    3、体验模拟器

    事实上,wp7的xap包不经任何改动即可在wp8上运行。

    对待3种分辨率,系统将分别这样处理画面:

    480*800:直接使用

    768*1280:等比放大至1.6倍

    720*1280:等比放大至1.5倍,并底部对齐放置(顶部将留下80像素的空隙)。

    对于前两种分辨率,直接运行的效果完全可以接受。但对于720*1280,这个体验就很差了:

    4、将工程升级到wp8

    我们的目的是快速将程序在wp8上运行起来。如果你的运气足够好,直接在打开的工程邮件菜单执行“Upgrade to windows phone 8.0”, 这项工作就算做完了。

    这样完成后的工程在720*1280的屏幕上也可以正常运行。在布局中它用到的布局分辨是480*853.

    那么怎么才算运气足够好呢?

    没有使用toolkit,没有使用用户id,没有使用资源文件或者资源文件里写法很规范,没有将纵向布局写成绝对高度(想想480*800和480*853),没有用到其他我还没有遇到的问题。

    大多数人运气都不会这么好(一般demo的小程序倒是很容易交好运),下面看看遇到以上问题怎么解决。

    1)工程中用到了toolkit

    toolkit中的LongListSelector控件在命名空间Microsoft.Phone.Controls里,和wp8系统内置LongListSelector所在命名空间一致。这会导致编译错误。

    解决方法:

    下载tookit源码 http://silverlight.codeplex.com

    删除LongListSelector相关的代码及Themes\generic.xaml中LongListSelector相关的样式

    编译出新的toolkit库,并在你的工程中引用即可 (需要注意LongListSelector的使用细节也有改变)

    2)使用了用户ID

    UserExtendedProperties.GetValue("ANID")将抛出异常。这个问题我还没有找到解决方法,一个勉强可以接受的方法是使用设备ID代替

                string strDeviceID = "";
    
                object objDeviceID = DeviceExtendedProperties.GetValue("DeviceUniqueId");
    
                if (objDeviceID is byte[])
                {
                    byte[] bytesDeviceID = (byte[])objDeviceID;
                    if (bytesDeviceID != null)
                    {
                        foreach (byte b in bytesDeviceID)
                        {
                            strDeviceID += b.ToString("X2");
                        }
                    }
                }
    

     3)资源词典里的规范问题

      <sys:String x:Key="picurl1">/Images/pic1.png</sys:String>
       <ImageBrush x:Key="pageBgBrush" ImageSource="{StaticResource picurl1}" />
    

     改成这个吧

      <BitmapImage x:Key="picurl1" UriSource"/Images/pic1.png" />
       <ImageBrush x:Key="pageBgBrush" ImageSource="{StaticResource picurl1}" />
    

     其他的酌情修改

    4)纵向布局问题

    这个在开始写代码是注意一点的话不会出现。遇到的话需要修改页面布局,尽量使用一些相对高度布局,

    例如Grid的布局使用可拉伸的,至少有一个子空间RowDefinition需要定义为“*”

            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    

     控件的相对位置需要使用类似 VerticalAlignment="Center"/VerticalAlignment="Stretch" 的方式,而不应该直接在Margin里设置。

    自此,wp8的项目升级已经完成。剩下的就是体验wp8的新特性了

  • 相关阅读:
    Opaque data type--不透明类型
    swift class的动态派发
    swift class的虚函数表
    swift class的虚函数表、扩展、@objc修饰、虚函数的派发方式研究
    swift语言混编--语言交互的接口
    CPU指令分类
    CPU的内部架构和工作原理-原文
    cpu的组成及分工
    简单介绍 CPU 的工作原理
    php7开启强类型模式
  • 原文地址:https://www.cnblogs.com/matrixchen/p/2761088.html
Copyright © 2011-2022 走看看