2010年4月15日木曜日

WPF:デザインビューでカスタムコントロールがロードされない

WPFでカスタムコントロールを作成し、それをPage(またはWindow)に貼り付けると、Pageのデザインビューでカスタムコントロールが正しくロードされずに下図のような状態になることがままある。


で、エラーも一緒に検出されていて「Could not create an instance of 'Your control'」とロードに失敗したカスタムコントロールはこれだ!と指摘してくれている。が、個々のカスタムコントロールのデザインビューでは正常にUIを確認できるため、なぜPageに貼り付けた途端に動作しなくなるのかは皆目検討がつかない。それなので長々とGoogleした結果、やっと正解にたどり着いた。

Troubleshooting WPF Designer load failures

理由は色々と考えられるようなので、かなりの確認事項があるけれど、Expression Blendなんかを使ってデザイナーと共同作業する人はデザインビューが使えないと死亡遊戯だと思うので一読をおすすめする。

ちなみに私の場合は、別ファイルに保存してApp.xamlで統合されているResourceDictionaryがデザインタイムにロードできないせいで読み込みエラーが発生していた。そのような場合は個々のカスタムコントロールのXAMLにResourceDictionaryへの参照を以下のように追加してやれば良い。

<UserControl.Resources>
 <ResourceDictionary>
 <ResourceDictionary.MergedDictionaries>
 <ResourceDictionary Source="/Resources/MainWindowRes.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

て、あああああああ、XAMLの構成を確認しようとしたらまたVS2008がハングった。むかつく。こいつはApp.xamlをいじるとすぐにハングしやがる。VS2010では解決済みらしいけれど、VS2010にファイルをアップデートするとExpression Blend 2が動かないというジレンマ。

0 件のコメント:

コメントを投稿