Welcome to MSDN Blogs Sign in | Join | Help

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

Published Tuesday, August 14, 2007 10:40 PM by aonishi
Filed under: ,

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
required 
(required) 
 
Page view tracker