亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Windows Phone7中的IronRuby

系統(tǒng) 1970 0

作者:馬寧

示例代碼下載地址:

WP7_aawolf_IronRubyWP7.rar

寫這篇BLOG完全是因?yàn)榭戳薓SDN上的這篇文章:

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

Windows Phone 7的開發(fā)工具不支持動(dòng)態(tài)語(yǔ)言,所以IronRuby支持Windows Phone 7就顯得格外重要了。剛看這篇文章的時(shí)候,還鬧了個(gè)笑話,看了一遍代碼,一句都不認(rèn)識(shí),心想難道語(yǔ)言換到.NET上,變化怎么這么大?仔細(xì)一看,原來(lái)是Ruby,而不是Python ^_^,小蟒蛇這次落后了。以前用Python寫過自動(dòng)化測(cè)試腳本,沒接觸過Ruby,所以,把Ruby看成Python了。

不支持動(dòng)態(tài)語(yǔ)言,一直是Windows Mobile編程的痛,這次終于有搞頭了。終于可以動(dòng)態(tài)改變程序的邏輯了,光這一點(diǎn)就給我們提供了無(wú)限的想象空間。Windows Phone上的F#也快了吧?^_^

言歸正傳,這次我完全是照葫蘆畫瓢,只是將自己嘗試中的一些關(guān)鍵點(diǎn)寫出來(lái),讓大家少走彎路。更多信息大家可以參考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中創(chuàng)建一個(gè)Silverlight for Windows Phone 7的工程,工程名叫做“IronRubyWP7”,然后選擇“Project”菜單的“Add Reference”選項(xiàng),在彈出的對(duì)話框中,選擇“Browse”標(biāo)簽,我們可以找到解壓后的IronRuby目錄,將\silverlight\bin中的DLL文件加入到工程中來(lái):

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

IronRuby2
接下來(lái),我們?cè)诠こ讨刑砑右粋€(gè)文本文件,在Solution Explorer中選中IronRubyWP7,右鍵,“Add”-“New Item”,在對(duì)話框中選擇“Text File”,將文件名改為“MainPage.rb”。

選中MainPage.rb文件,在屬性中將“Build Action”設(shè)置為“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>

請(qǐng)注意,我修改了最后一行的容器控件名稱,原示例中的名稱是“ContentGrid”,但是Silverlight for Windows Phone向?qū)J(rèn)創(chuàng)建的XAML文件中容器類名稱是“ContentPanel”。這里會(huì)引起一個(gè)運(yùn)行期錯(cuò)誤,因?yàn)镮ronRuby不能Debug,所以第一次調(diào)試起來(lái)比較痛苦。

接下來(lái),我們要打開MainPage.xaml.cs文件,將IronRuby初始化代碼,加入到MainPage類的構(gòu)造函數(shù)中:

    
      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>

請(qǐng)大家注意InitializeComponent方法的位置,在初始化IronRuby運(yùn)行時(shí)之前,一定要先完成控件初始化的工作,這是我血和淚的教訓(xùn)。另外一個(gè)需要注意的地方,就是讀取Ruby文件的路徑。我們似乎也可以通過HttpRequest獲取一個(gè)Stream是吧?笑而不語(yǔ) ^_^

最后運(yùn)行的效果是這樣子的,整個(gè)開發(fā)過程歷時(shí)兩小時(shí):

clip_image008

相關(guān)資源

馬寧的Windows Phone 7開發(fā)教程(1)—— Windows Phone開發(fā)工具初體驗(yàn)

馬寧的Windows Phone 7開發(fā)教程(2)—— Windows Phone XNA 4.0 3D游戲開發(fā)

馬寧的Windows Phone 7開發(fā)教程(3)—— XNA下使用MessageBox和軟鍵盤

馬寧的Windows Phone 7開發(fā)教程(4)—— XNA顯示中文字體

Windows Phone7中的IronRuby


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 精品91自产拍在线观看99re | 欧美色99| 伊人精品影院一本到欧美 | 精品福利一区 | 亚洲一区毛片 | 国产自精品在线 | 99久久精彩视频 | 国产日韩欧美在线一区二区三区 | 久久综合久久久 | 国产亚洲人成a在线v网站 | 亚洲激情网址 | 日韩免费片 | 一级女人毛片 | 久久国产精品国产自线拍免费 | 久久这里只有精品国产99 | 欧美国产高清 | 久久在线观看免费视频 | 欧美日韩亚洲国产 | 久久久久久久久免费视频 | 国产精品久久久久久久久久影院 | 久久香蕉国产线看观看乱码 | a毛片视频免费观看影院 | 色噜噜狠狠色综合久 | 一区不卡 | 高清不卡一区二区 | 久久青草免费视频 | 极品粉嫩粉嫩福利视频在线 | 亚洲综合套图 | 欧美一区二区手机在线观看视频 | 亚洲毛片儿| 国产五月婷婷 | 国产h视频免费观看 | 99免费在线播放99久久免费 | 亚洲va欧美va人人爽夜夜嗨 | 天天综合在线视频 | 亚洲大片在线观看 | 色国产视频 | 国产成人在线免费观看 | 色爱区综合激情五月综合色 | 国产美女mm131爽爽爽免费 | 欧美国产亚洲一区二区三区 |