Silverlight2.0 ではまった話

Silverlight 勉強会に備えて環境をそろえてみた。参考にしたのはこのへん。

MS公式のサンプルが動かない

ヘルプの CHM 版 の「Dynamic Languages in Silverlight 2」を参考にして触っていたんだけどエラーになる。

こんなエラー。

Silverlight error message     
ErrorCode: 4002
ErrorType: ManagedRuntimeError       
Message: Microsoft.Scripting.ArgumentTypeException: LoadRootVisual() takes exactly 1 argument (1 given)

   場所 Microsoft.Scripting.Ast.Interpreter.ExecuteThrow(CodeContext context, ThrowStatement node)

   場所 Microsoft.Scripting.Ast.Interpreter.EvaluateExpression(CodeContext context, Expression node)

   場所 Microsoft.Scripting.Ast.Interpreter.Execute(CodeContext context, Expression expression)

エラーメッセージ、分かりにくすぎるよ…。

どうやらこのあたりが問題のようだ。

Import("System.Windows.Application")

function App() {
   this.scene = Application.Current.LoadRootVisual("app.xaml")
}

他のサンプルと見比べると LoadRootVisual は引数2ついるようだ。

検索してみた

2ch に同じ問題ではまってる人がいた。

366 :デフォルトの名無しさん:2008/03/07(金) 23:59:55 
ヘルプの Dynamic Languages in Silverlight 2 
に書いてある通りやったのに 
LoadRootVisual の引数の使い方がおかしいって怒られるぞ・・・ 
IronRuby, IronPython でもダメだ。ほんとに動くのか 

動きません。

で、Silverlight2 Beta1を入れてみた - Programmable Life に解決方法を見つけた。JScript だと次のように修正する。

Import("System.Windows.Application")
Import("System.Windows.Controls.Canvas") 

function App() {
   this.scene = 
      Application.Current.LoadRootVisual(new Canvas(), "app.xaml")
}

やっと動いた…。

自分は元々 Windows 開発者なので、MS のドキュメントは見慣れてるほうだと思うんだけど、それでも CHM ファイルのせいで2時間ぐらい苦しめられた。

もしや、と思って Web のドキュメントを参照したら、ちゃんと修正されていた。

CHM が間違ったまま放置されている…。最新版がどこかから手に入るのかなぁ。

まとめと雑感

  • ドキュメントは最新のものを見よう
  • Silverlight は難しい。AS3/Flex の方がドキュメントは分かりやすい。
  • Silverlight のはてブ率の低さは異常。すごく優れたドキュメントの Silverlight 2 SDK+JavaScriptで無償の開発環境を作る #1 [環境整備編] (Neutral Scent) が2008年5月15日時点で 14users だなんて!
  • Twitter 検索の Flex と Silverlight の RSS を購読してウォッチしてるんだけど、あきらかに Flex やってる人のほうが多い。ネット上では Flex のほうが流行ってきてる印象。スーツな世界では Silverlight のほうが強そうだけど。