Silverlight 1.0でアプリケーションを開発し、デバッグの際に困難なことは、runtime errorの意味がわかりづらいということです。何かSilverlight側でエラーが起こっていることはわかるものの、メッセージやエラー番号から原因を調べるとしても情報が不足していると思います。今までに遭遇した例を紹介しましょう。
・createFromXamlメソッドでのエラー : x:Nameを使っている場合動的なUIを構築する際に、Silverlightのコントロールの.content.createFromXaml()メソッドを多用することになるわけですが、XAMLの中に間違いがあったり、XML名前空間が指定されてないXAML文字列内でx:Nameを指定することによってエラーが起こることがあります。動的に要素を作って名前をつける場合に、x:Nameではなく、Nameを使ってしまうのも手かもしれません。厳密には、xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'をきちんとXAML文字列を生成する際に含めることです。
・createFromXamlメソッドでのエラー : Well-formed XML documentになっていない場合動的なUIが作れることがわかってきて、あれもこれも取り入れてみようという場合、気をつけたいのが、生成したXAML(XML)が整形式になっているかを確認しましょう。開始と終了タグが対になっていることはもちろんのこと、きちんとルートとなるタグがあることを確認しましょう。たとえば、3つのCanvasを作ろうとして、次のようなXAML文字列をcreateFromXamlメソッドに渡すとエラーになります。
<!-- 整形式でない例: うまくいきません --><Canvas Width='140' Height='180' Canvas.Left='436' Canvas.Top='151' > <TextBlock Width='120' Height='16' >AAA</TextBlock></Canvas><Canvas Width='140' Height='180' Canvas.Left='136' Canvas.Top='378' > <TextBlock Width='120' Height='16' >BBB</TextBlock></Canvas><Canvas Width='140' Height='180' Canvas.Left='286' Canvas.Top='378' > <TextBlock Width='120' Height='16' >CCC</TextBlock></Canvas>
3つのCanvasの宣言は間違ってないのですが、createFromXamlメソッドがWell-formedなXMLを要求するため、エラーになるわけです。手っ取り早く解決するには、この3つCanvasを別のCanvasでまとめてしまうことです。
<!-- 整形式に変えた例: うまくいきます --><Canvas> <Canvas Width='140' Height='180' Canvas.Left='436' Canvas.Top='151' > <TextBlock Width='120' Height='16' >AAA</TextBlock> </Canvas> <Canvas Width='140' Height='180' Canvas.Left='136' Canvas.Top='378' > <TextBlock Width='120' Height='16' >BBB</TextBlock> </Canvas> <Canvas Width='140' Height='180' Canvas.Left='286' Canvas.Top='378' > <TextBlock Width='120' Height='16' >CCC</TextBlock> </Canvas></Canvas>・・・
createFromXamlメソッドを使うときの参考になれば幸いです。