将SL4 程序移植到WP7(附Teched2010真机图)

简介:

Silverlight 4(SL4)和Windows Phone 7(WP7)大家已经都很熟悉了,作为WP7 开发框架之一的Silverlight,使广大开发者方便快捷的开发WP7 应用程序或游戏。如果您是一位SL 开发人员,那WP7 的应用程序开发也会使你得心应手。

     前不久WP7 已经在国外上市,这意味着相应的WP7 应用程序和游戏将会蜂拥而至,由于之前研究过一阵SL,看到WP7 到来手便开始发痒。本篇将原来一个SL 模拟Nano5 的程序移植到WP7,为大家简单演示一下移植过程。SL 程序请参考《Silverlight 模拟Nano5 界面效果》。

素材移植

注意,您的计算机上需要安装Windows Phone Developer Tools。首先我们来新建一个WP7 应用程序。

New

由于SL 程序比较简单只包含一些图片,所以将所有素材资源复制到WP7 项目。如下图SL4 与WP7 项目列表对比。

SL4         WP7

程序移植

接下来先对XAML 程序进行移植,原来SL4 程序里XAML 只有一个<Canvas>。

<Canvas x:Name="LayoutRoot" MouseLeftButtonDown="LayoutRoot_MouseLeftButtonDown" />

在WP7 中需要将<Canvas> 放入ContentPanel <Grid>。

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"
      ManipulationDelta="ContentPanel_ManipulationDelta">
     <Canvas x:Name="imageList" Background="Transparent"/>
</Grid>

 

下面移植C# 程序,可以将SL4 的C# 程序全部复制到WP7 中再逐一对错误提示进行修改和调整。


MainPage() 方法

SL4:

public MainPage()
{
    InitializeComponent();
    addImages();
    HtmlPage.Window.AttachEvent("DOMMouseScroll", LayoutRoot_MouseWheel);
    HtmlPage.Window.AttachEvent("onmousewheel", LayoutRoot_MouseWheel);
    HtmlPage.Document.AttachEvent("onmousewheel", LayoutRoot_MouseWheel);
    startShow();
}

WP7:不再需要支持不同浏览器的鼠标滚轮事件。

public MainPage()
{
    InitializeComponent();
    addImages();
    startShow();
}

事件触发

SL4:通过MouseWheel 鼠标滚轮事件来切换专辑封面。

private void LayoutRoot_MouseWheel(object sender, HtmlEventArgs args)
{

    double mouseDelta = 0;
    ScriptObject e = args.EventObject;
    // Mozilla and Safari    
    if (e.GetProperty("detail") != null)
    {
        mouseDelta = ((double)e.GetProperty("detail"));
    }

    // IE and Opera   
    else if (e.GetProperty("wheelDelta") != null)
        mouseDelta = ((double)e.GetProperty("wheelDelta"));

    mouseDelta = Math.Sign(mouseDelta);

    moveIndex((mouseDelta > 0) ? 1 : -1);
}

WP7:通过ManipulationDelta 触屏事件来完成。

private void ContentPanel_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    if (e.DeltaManipulation.Translation.X > 0)
    {
        moveIndex(1);
    }
    else 
{ moveIndex(-1); } }

测试运行

打开WP7 模拟器后,原来的SL4 程序仍然可以在WP7 中正常运行,唯一区别就是原来的鼠标操作变为了触屏操作。

Test

总结

     当然本篇的SL4 程序相对来说比较简单,没有复杂的动态效果或类库调用。在本次Teched2010 大会也和泳涛兄(WP7 MVP)交流了一下。其实SL 程序移植到WP7 也并非易事。首先,要将原来SL 项目里所有使用的资源全部复制到WP7 项目。除图、音、影以外,更重要的是项目中引用的类库,有些类库可能在WP7 中并不支持。其次,要将SL 的XAML 代码移植到WP7,所谓WP7 中的SL 开发平台只是SL 的一部分,也就是说有些SL 的控件、属性在WP7 不能使用,所以要做进一步的调整。最后,要把C# 程序移植到WP7,这也是很复杂的过程,其中涉及的因素很多,可借助VS 强大的调试功能进行修改。后续我还会对一些稍微复杂些的程序进行移植,也希望大家分享自己的开发经验。

源代码

WP7Nano5.zip

Teched2010

最后上几张Teched2010 中用于Demo 演示和展示的WP7 真机。机型:三星

可以按自己的喜好设置主题颜色:

IMAG0037      IMAG0039

手机游戏:刺客信条、极品飞车,都是大作啊!玩了一下极品飞车,运行很流畅,通过重力感应控制赛车转向。

IMAG0038

     美中不足的是当前WP7 本身还不支持中文输入,也没有手写输入。要是用WP7 发短信可麻烦了,但似乎有第三方开发的软件可以支持。期待WP7 早日登陆国内市场。




本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2010/12/03/sl4-to-wp7.html,如需转载请自行联系原作者

相关文章
|
SQL 关系型数据库 MySQL
NSS LitCTF部分wp
NSS LitCTF部分wp
60 0
|
前端开发 rax 安全
CISCN WP ——R3vCr4ck
CISCN WP ——R3vCr4ck
76 0
|
Web App开发 SQL 前端开发
|
PHP
ctfshow-DJBCTF-veryphp wp
ctfshow-DJBCTF-veryphp wp
126 0
ctfshow-DJBCTF-veryphp wp
|
Linux
【Linux】查看文件内容 cat / tac / nl / less / more / head / tail(2)
【Linux】查看文件内容 cat / tac / nl / less / more / head / tail
101 0
【Linux】查看文件内容 cat / tac / nl / less / more / head / tail(2)
|
Linux
【Linux】查看文件内容 cat / tac / nl / less / more / head / tail(1)
【Linux】查看文件内容 cat / tac / nl / less / more / head / tail
122 0
【Linux】查看文件内容 cat / tac / nl / less / more / head / tail(1)
|
Linux Perl Shell
Linux 文件管理命令(cat,cmp,diff,file,find)
本文主要讲述文件管理的命令,包括cat,cmp,diff,file,find等命令,功能有标准输出显示的文件信息,文件对比,辨识文件类型,指定目录查找文件。
365 0
Linux 文件管理命令(cat,cmp,diff,file,find)
|
网络安全 开发工具
[CTF]pwnable.kr fd Wp
[CTF]pwnable.kr fd Wp
193 0
[CTF]pwnable.kr fd Wp
|
Shell Linux 数据安全/隐私保护
linux shell之xargs 、tr、sha1sum、head、tail一般使用
linux shell之xargs 、tr、sha1sum、head、tail一般使用
171 0
|
Linux Unix Shell
Linux-(touch,cat,nl,more|less,head|tail)
touch命令 1.命令格式: touch [选项]... 文件... 2.命令参数: -a   或--time=atime或--time=access或--time=use  只更改存取时间。
1497 0