読者です 読者をやめる 読者になる 読者になる

Hello Silverlight

Silverlight IronPython

IronPython 2.0のBetaが出たことだし、ここらでSilverlightもやってみることにする。以下のページでIronRubyを使ったケースについて解説していることを、IronPythonに読み替えてやってみる。

http://www.iunknown.com/2008/03/dynamic-silverl.html

下記のページも役に立った。

http://silverlight.net/Quickstarts/ProgramDlr.aspx

まだ分からないことばかりだが、IronPython.NET Frameworkを使ってアプリケーションを開発できるのは、僕の場合、FlexやAS3と違って覚えることが少なくてすむので、やっぱり楽だ。

Silverlight 2.0 Betaをインストールする

ここからSilverlight 2.0 Beta 1をインストールする。

Dynamic Silverlight SDKをダウンロードする

以下のサイトからDynamic Silverlight SDKをダウンロードする。

http://dynamicsilverlight.net/

とりあえずサンプルを実行してみる

Dynamic Silverlight SDKにはIronPythonIronRubyのサンプルが含まれているので、とりあえず眺めてみる。Windowsならば、PowerShellやcmd.exeから

C:\dynamic-silverlight\server.bat

非Windows環境ならば、Monoをインストールの上、

$ sh dynamic-silverlight/server.sh

で開発サーバを起動。

http://localhost:2060/samples/python/clock/

などを見てみる。

自分で作る

Silverlight, IronPythonHello Worldと表示する。よく分かっていないので、分かっていない部分はSilverlight QuickStartからコピペです。

http://silverlight.net/Quickstarts/default.aspx

各ファイルの配置

hello, hello/appというディレクトリを作り、index.html, app.xaml, app.pyを次のように配置する。

+ hello
++ app
+++ app.xaml
+++ app.py
++ index.html
app.xaml

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" TextWrapping="Wrap" Foreground="Black" >
        </TextBlock>
</UserControl>
app.py

IronPythonでアプリケーションを定義。

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

class Hello(object):
  def __init__(self):
  	self.scene = Application.Current.LoadRootVisual(UserControl(), "app.xaml")

  def start(self):
    self.scene.Message.Text = "Hello World"

Hello().start()
index.html

ブラウザで表示するときに使うHTML。何が何のために必要なのか分からん。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

<head>
  <meta content="IE=7" http-equiv="X-UA-Compatible" />
  <title>Dynamic Silverlight Test Page </title>

  <style type="text/css">
    html, body {
      height: 100%;
      overflow: auto;
    }
    body {
      padding: 0;
      margin: 0;
    }
    #silverlightControlHost {
      height: 100%;
    }
  </style>

  <!-- Formatting for DLR error handling -->
  <link type="text/css" rel="stylesheet" href="assets/stylesheets/error.css" />

  <!-- 
    Error handling for when DLR errors are disabled (with 
    reportErrors=false, or not defined at all)
  -->
  <script type="text/javascript">
    function onSilverlightError(sender, args) {
      if (args.errorType == "InitializeError")  {
        var errorDiv = document.getElementById("errorLocation");
        if (errorDiv != null)
          errorDiv.innerHTML = args.errorType + "- " + args.errorMessage;
      }
    }
  </script>
</head>

<body>
  <!-- 
    Syntax/Runtime errors from Silverlight will be displayed here.
	  This will contain debugging information and should be removed 
    or hidden when debugging is completed 
  -->
	<div id='errorLocation' style="font-size: small;color: Gray;"></div>

  <div id="silverlightControlHost">
    
    <object data="data:application/x-silverlight," type="application/x-silverlight-2-b1" width="100%" height="100%">
      <param name="source" value="app.xap"/>
      <param name="onerror" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="initParams" value="reportErrors=errorLocation" />
      <param name="windowless" value="true" />
      
      <a href="http://go.microsoft.com/fwlink/?LinkID=108182" style="text-decoration: none;">
          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
      </a>
    </object>
    <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
     
  </div>

</body>
</html>

あとは先ほどの開発サーバで表示して確認。