Windows Phone7中的IronRuby

作者:马宁

示例代码下载地址:

WP7_aawolf_IronRubyWP7.rar

写这篇BLOG完全是因为看了MSDN上的这篇文章:

http://msdn.microsoft.com/en-us/magazine/ff960707.aspx

Windows Phone 7的开发工具不支持动态语言,所以IronRuby支持Windows Phone 7就显得格外重要了。刚看这篇文章的时候,还闹了个笑话,看了一遍代码,一句都不认识,心想难道语言换到.NET上,变化怎么这么大?仔细一看,原来是Ruby,而不是Python ^_^,小蟒蛇这次落后了。以前用Python写过自动化测试脚本,没接触过Ruby,所以,把Ruby看成Python了。

不支持动态语言,一直是Windows Mobile编程的痛,这次终于有搞头了。终于可以动态改变程序的逻辑了,光这一点就给我们提供了无限的想象空间。Windows Phone上的F#也快了吧?^_^

言归正传,这次我完全是照葫芦画瓢,只是将自己尝试中的一些关键点写出来,让大家少走弯路。更多信息大家可以参考Shay Friedman的BLOG:http://ironshay.com/

首先,我们要下载IronRuby for Windows Phone版本(.NET 3.5):

http://ironruby.codeplex.com/releases/view/43540#DownloadId=133276

然后,在Visual Studio 2010中创建一个Silverlight for Windows Phone 7的工程,工程名叫做“IronRubyWP7”,然后选择“Project”菜单的“Add Reference”选项,在弹出的对话框中,选择“Browse”标签,我们可以找到解压后的IronRuby目录,将\silverlight\bin中的DLL文件加入到工程中来:

IronRuby1
在忽略一些警告提示之后,程序集将被加入到工程中。我们可以在Solution Explorer中看到刚被加入的程序集:

IronRuby2
接下来,我们在工程中添加一个文本文件,在Solution Explorer中选中IronRubyWP7,右键,“Add”-“New Item”,在对话框中选择“Text File”,将文件名改为“MainPage.rb”。

选中MainPage.rb文件,在属性中将“Build Action”设置为“Embedded Resource”。

IronRuby3

我们打开MainPage.rb文件,输入下面的Ruby代码:

# Include namespaces for ease of use

include System::Windows::Media

include System::Windows::Controls

# Set the titles

Phone.find_name("ApplicationTitle").text = "aawolf.cnblogs.com"

Phone.find_name("PageTitle").text = "IronRuby& WP7"

# Create a new text block

textBlock = TextBlock.new

textBlock.text = "IronRuby is running on Windows Phone 7!"

textBlock.foreground = SolidColorBrush.new(Colors.Green)

textBlock.font_size = 48

textBlock.text_wrapping = System::Windows::TextWrapping.Wrap

# Add the text block to the page

Phone.find_name("ContentPanel").children.add(textBlock)
<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>

请注意,我修改了最后一行的容器控件名称,原示例中的名称是“ContentGrid”,但是Silverlight for Windows Phone向导默认创建的XAML文件中容器类名称是“ContentPanel”。这里会引起一个运行期错误,因为IronRuby不能Debug,所以第一次调试起来比较痛苦。

接下来,我们要打开MainPage.xaml.cs文件,将IronRuby初始化代码,加入到MainPage类的构造函数中:

    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // Allow both portrait and landscape orientations
            SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

            // Create an IronRuby engine and prevent compilation
            ScriptEngine engine = Ruby.CreateEngine();

            // Load the System.Windows.Media assembly to the IronRuby context
            engine.Runtime.LoadAssembly(typeof(Color).Assembly);

            // Add a global constant named Phone, which will allow access to this class
            engine.Runtime.Globals.SetVariable("Phone", this);

            // Read the IronRuby code
            Assembly execAssembly = Assembly.GetExecutingAssembly();
            Stream codeFile =
              execAssembly.GetManifestResourceStream("IronRubyWP7.MainPage.rb");
            string code = new StreamReader(codeFile).ReadToEnd();

            // Execute the IronRuby code
            engine.Execute(code);
        }
    }
<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>

请大家注意InitializeComponent方法的位置,在初始化IronRuby运行时之前,一定要先完成控件初始化的工作,这是我血和泪的教训。另外一个需要注意的地方,就是读取Ruby文件的路径。我们似乎也可以通过HttpRequest获取一个Stream是吧?笑而不语 ^_^

最后运行的效果是这样子的,整个开发过程历时两小时:

clip_image008

相关资源

马宁的Windows Phone 7开发教程(1)——Windows Phone开发工具初体验

马宁的Windows Phone 7开发教程(2)——Windows Phone XNA 4.0 3D游戏开发

马宁的Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘

马宁的Windows Phone 7开发教程(4)——XNA显示中文字体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值