Silverlight 1.0 : 試行錯誤を減らすための参考情報 : createFromXamlメソッド


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メソッドを使うときの参考になれば幸いです。

Skip to main content