今回は、SDKで提供されるテンプレート集の構造を説明します。最初にindex.htmlのobjectタグを解説します。
<object data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%"> <!-- XAPファイルを指定します。指定したファイル名が 開発中に使用するフォルダ名になります。 --> <param name="source" value="python.xap"/> <!-- "initParams"はkey=valueの形式で、カンマ区切りで複数の パラメータを指定できます。 --> <param name="initParams" value="debug=true, reportErrors=errorLocation" /> <!-- Silverlightランタイムのエラーを処理する javascript関数を指定します。この関数は javascripts/error.js で定義されています。 --> <param name="onerror" value="onSilverlightError" /> <!-- 他のパラメータは、Silverlightのプロパティです。 --> <param name="background" value="white" /> <param name="windowless" value="true" /≶ <!-- Silverlight ランタイムのインストール用のリンクです。 --> <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/> </a> </object>
以下に指定しているパラメータの説明を記載します。
Silverlight2.0で動的言語を使う上で重要なのが、initParamsパラメータになります。ここで動的言語の起動用の様々な指定を行っています。このパラメータは、Microsoft.Scripting.Silverlight.DynamicApplicationクラスのコンストラクタに渡されます。独自のパラメータを指定した場合は、DynamicApplicationクラスのInitParamsプロパティを使って辞書オブジェクトへアクセスすることができますので、起動時に自分用のパラメータを指定することも可能です。
python言語のテンプレートでは、python.xapが指定されていますのでpythonフォルダ内にapp.pyがあることになります。このapp.pyの内容を以下に示します。
from System.Windows import Application from System.Windows.Controls import UserControl class App: def __init__(self): root = Application.Current.LoadRootVisual( UserControl(), "app.xaml") root.Message.Text = "Welcome to Python and Silverlight!" App()
Pythonコードで、Appクラスを定義してからAppクラスのインスタンスを作成するようになっています。ここでのポイントは、System.Windows.Applicationクラスの使い方にあります。
以下にapp.xamlを示します。
<UserControl x:Class="System.Windows.Controls.UserControl" xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid x:Name="layout_root" Background="White"> <TextBlock x:Name="Message" FontSize="30" /> </Grid> </UserControl>
追伸:サンプルのcollateraldamageのPython版についてゲームのサンプルですが、Python版を試すとエラーが発生します。リーソースが見つかりませんというものです。エラーが発生しても継続することはできます。このエラーを回避するには、index.html内のonSilverlightError関数に以下を追加する必要があります。
else if (errorType == "ImageError") { // ImageErrorを握り潰す return; }
PingBack from http://outdoordecoration.info/story.php?id=1656