デザイナーのリフレクションを介して WPF 型 (UserControl や Page など) をインスタンス化する必要があります。私が抱えている問題は、Activator.CreateInstance を使用してこれらをインスタンス化しようとすると、最終的にStaticResourceマークアップ拡張によってスローされた例外をラップするTargetInvocationExceptionを取得することです。
明確化: 型は、実行時に読み込まれる別のアセンブリにあります。
どうやら、型の定義で静的リソースが定義されている場合でも、 Activator.CreateInstanceは{StaticResource XXX}マークアップ拡張を使用する型をインスタンス化できないようです。
したがって、次のタイプの定義 (タイプ + xaml ファイル) しかない場合:
<Page x:Class="Hurr.Durr">
<Page.Resources>
<ControlTemplate x:Key="whatever">
<TextBlock Text="This is a stupid example."/>
</ControlTemplate>
</Page.Resources>
<ContentControl Template="{StaticResource whatever}" />
</Page>
実行時にこれをどのようにスピンアップしますか?
ところで、代わりに DynamicResource を使用することを要求することは受け入れられません。Visual Studio はこれを必要としますか? それでも、VS は WPF フレームワーク要素のコピーをスピンアップしてデザイナーに貼り付けることができます。
この問題を示すサンプル アプリケーション (ベータ 2、申し訳ありません) を次に示します。
http://cid-f8be9de57b85cc35.skydrive.live.com/self.aspx/Public/ResourcesGoKaboom.zip
アプリは、リソース ディクショナリに描画されたページを読み込もうとします。Application.LoadComponentとActivator.CreateInstanceを使用して動的にロードしようとすると、両方とも失敗します。
さて、上記の例は問題なく動作します。問題は、要素内で定義されたリソースを参照する要素の属性内で StaticResource を使用していたことです。
私を投げていたのは、これがビジュアルスタジオ内で機能することでした。 そのため、デザイナーではすべてが大丈夫に見えましたが、IRL ではすべて洋ナシの形をしていました。私見、これはバグであり、そのように報告しました:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=519244
VS の失敗が失敗したのか、それとも StaticResource 拡張機能が VS では機能していたが IRL では機能していなかったのかは不明です。