IronPython で Silverlight 2.0

Silverlight SDK 2.0 Beta1 を使って IronPython を使った簡単なサンプルを作ってみた。

手順は以下の通り。

  1. app ディレクトリ作成
  2. app.xaml 作成
  3. app.py 作成
  4. chiron.exe による app.xap 生成
  5. index.html 作成

なお、Silverlight SDK 2.0 Beta1 では IronPython のほかにも IronRuby や Managed Jscript が使える模様。

app ディレクトリ作成

適当なディレクトリを作成し(これをカレントディレクトリとする)、その中に app サブディレクトリを作成。

app.xaml 作成

app ディレクトリ内にコントロールの UI を定義した app.xaml ファイルを作成。(ファイルは UTF-8 で保存)

<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">

    <StackPanel Orientation="Horizontal">
        <TextBlock x:Name="TextBlock1" Text="てすと" />
        <TextBlock x:Name="TextBlock2" Text="test" />
    </StackPanel>
</UserControl>

app.py 作成

app ディレクトリ内に IronPython で処理を記述した app.py ファイルを作成。

from System.Windows import Application
from System.Windows.Controls import UserControl

def onClickTextBlock1(sender, args):
    sender.FontSize *= 2

def onClickTextBlock2(sender, args):
    scene.TextBlock1.FontSize = defaultFontSize

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

defaultFontSize = scene.TextBlock1.FontSize

scene.TextBlock1.MouseLeftButtonUp += onClickTextBlock1
scene.TextBlock2.MouseLeftButtonUp += onClickTextBlock2

なお、上記のスクリプトは以下のような処理を実装している。

  • "てすと" の文字列をマウスで左クリック -> "てすと" のフォントサイズを 2倍
  • "test" の文字列をマウスで左クリック -> "てすと" のフォントサイズを元に戻す

chiron.exe による app.xap 生成

Silverlight 2.0 SDK Beta1 のインストールディレクトリ内(例 C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Tools\Chiron)の Chiron.exe を使って、実行に必要なアセンブリファイルを含んだ圧縮ファイル app.xap ファイルを生成する。(カレントディレクトリで実行)

>chiron.exe /directory:app /zipdlr:app.xap

ちなみに、app.xap には以下のようなファイルが含まれる。

index.html 作成

app.xap が生成されたカレントディレクトリに index.html を作成する。object タグを使って Silverlight 用の定義を記述し、source で app.xap を指定する。

<html>
<body>
    <object data="data:application/x-silverlight," type="application/x-silverlight-2-b1" width="100%" height="100%">
        <param name="source" value="app.xap"/>
    </object>
</body>
</html>

あとは、Silverlight 2.0 をインストールした Web ブラウザで index.html を表示すればよい。とりあえず Firefox 2.0 と IE7 で動作を確認済み。