魔法花园 - .NET版

我关于.NET技术的Blog

在Silverlight 2 beta1中使用IronPython等动态语言

目前在Silverlight Tools Beta 1 for Visual Studio 2008 中包括了3个动态语言的运行库:IronPython、IronRuby和Managed JScript。

但是VS2008针对这三个动态语言的模板还没有完成,所以现在我们没有办法创建动态语言的Silverlight 2项目(甚至于VB的都不行,默认只是C#的);不过Silverlight 2 SDK提供了一个工具来帮助我们生成部署的xap文件——Chiron工具,它在目录:C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Tools\Chiron里。

另外,在CodePlex上还提供了一个Dynamic Silverlight Sample的项目,来指导我们在Silverlight 2中使用动态语言,不过目前这个项目还是针对Silverlight 1.1的。

下面我就给大家演示一下(以IronPython为例):

  • 创建一个目录,如IPSL2,在里面创建2个子目录:app(包含动态语言代码文件和XAML文件文件)和assets(包含资源文件,如图片等);在assets中在创建一个子目录js(这个目录其实可以不要,在1.1中是用于保存silverlight.js的,不过现在可以保存其他js文件)。
  • 在app目录中创建一个IronPython代码文件:app.py,代码如下(在这里,我是使用XamlReader.Load把xaml字符串直接加载,本来我想用Application.Current.LoadRootVisual方法把app.xaml载入,但是一直没有成功,有朋友知道怎么弄吗?):

from System.Windows import Application
from System.Windows.Markup import XamlReader

Application.Current.RootVisual = XamlReader.Load("""
<Canvas xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <TextBlock x:Name="message" FontSize="30"/>

</Canvas>""")

Application.Current.RootVisual.message.Text="Welcome to Silverlight and IronPython!"

  • 在app目录中创建一个xaml代码文件:app.xaml(在我的例子中,可以不要这个文件,但是如果使用LoadRootVisual方法的话,就需要),代码如下:

<Canvas xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <TextBlock x:Name="message" FontSize="30"/>

</Canvas>

  • 在根目录中,本例即IPSL2目录中,创建一个Index.html文件来作为浏览页面,body中的代码如下(解释一下,我这里为什么要用图片的原因,这是因为在Windows Live Writer中贴入一下代码后,就在其中显示一个Silverlight的控件了,真是的!):
image
  • 现在开始使用Chrion工具来运行这个动态语言Silverlight 2应用程序了。
  • 首先,把Chrion所在的目录添加到PATH中
  • 启动命令行,进入到IPSL2目录中,运行Chrion /b来启动一个Web Server,并同时打开一个浏览器
  • 在浏览器中点index.html文件,就可以看到Silverlight over IronPython的应用程序运行了,如下图:

image

另外对于使用IronRuby的同学来说,可以参考John Lam的文章(注:下面我给的连接是通过Web代理访问,直接是访问不了的):

John Lam on Software Dynamic Silverlight Part 1 Hello, World!

John Lam on Software Dynamic Silverlight Part 2 Managed JScript and flickr

整个示例的代码在这里下载:http://www.91files.com/?GXW6W7RN1L2N1N358LJC

Update!
对于app.py和app.xaml得到思归的提醒,可以使用如下代码(其实一下代码,我昨晚也尝试过,结果没有成功,简直晕死!):
app.py:
============
from System.Windows import Application
from System.Windows.Controls import UserControl

Application.Current.LoadRootVisual(UserControl(), 'app.xaml')

Application.Current.RootVisual.message.Text="Welcome to Silverlight and IronPython!"
============
app.xaml:
============
<UserControl
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   x:Class="System.Windows.Controls.UserControl"
   x:Name="Page" >

    <TextBlock x:Name="message" FontSize="30"/>

</UserControl>
============

posted on 2008-03-08 11:37 redmoon 阅读(1787) 评论(11)  编辑 收藏 所属分类: .NET 3.5

评论

#1楼  2008-03-08 12:20 Q.Lee.lulu      

字体很小很难看   回复  引用  查看    

#2楼 [楼主] 2008-03-08 12:23 redmoon      

字体不小啊?你是说那部分的文字?   回复  引用  查看    

#3楼  2008-03-08 13:57 saucer [未注册用户]

如果你用UserControl,LoadRootVisual应该成功的,参考

Programming Silverlight with Dynamic Languages
http://silverlight.net/Quickstarts/ProgramDlr.aspx   回复  引用  查看    

#4楼  2008-03-08 14:02 G yc {Son of VB}      

我的VB 啊。。。。。。。。。。。。。。。。。。。   回复  引用  查看    

#5楼  2008-03-08 14:34 自由、创新、研究、探索……      

动作真快   回复  引用  查看    

#6楼  2008-03-09 17:55 jjx      

dynamicsilverlight.net/dynamic-silverlight.zip

2.0的代码   回复  引用  查看    

#7楼 [楼主] 2008-03-09 20:10 redmoon      

jjx,dynamicsilverlight.net 这个域名你申请的?   回复  引用  查看    

#8楼  2008-03-10 00:17 saucer [未注册用户]

我把上面提到的文章翻译成中文了

http://blog.joycode.com/saucer/archive/2008/03/09/114940.aspx   回复  引用  查看    

#9楼  2008-03-10 09:19 jjx      

--引用--------------------------------------------------
redmoon: jjx,dynamicsilverlight.net 这个域名你申请的?
--------------------------------------------------------
不是啊 ,呵呵 ,从John Lam blog上知道的   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-08 19:25 编辑过
 
另存  打印
最新IT新闻:
· 56被关一月 危机的是整个视频业
· 李开复:中文搜索是谷歌战略核心
· 《星际争霸2》新图:黑暗圣堂武士Zeratul
· FriendFeed介绍
· 微软在台北发布新色鼠标产品
 


导航

公告

朱永光 IT自由人

InfoQ中文站.NET社区首席编辑

环境保护实践者



 

与我联系

常用链接

留言簿(20)

我管理的小组

我参与的团队

随笔分类

随笔档案

文章分类

.NET技术

音乐

搜索

最新评论

阅读排行榜

评论排行榜

60天内阅读排行