QA@IT

windowsforms をホストに wpf コントロールを表示するときのリソース

3395 PV

WindowsForms のプロジェクトに WPF ユーザコントロールを配置するものを作っています。

UserControl のXAML編集画面のプレビューでは問題なく表示されているのに、Form にツールバーからコントロールをドラッグアンドドロップするとエラーが出ます。

コピペできなかったので一部省略してます。

System.Windows.Markup.XamlParseException
System.Windows.Media.Imaging.BitmapImage の初期化で例外がスローされました
System.IO.IOException.Assembly.GetEntryAssembly は null を返します
Application.ResourceAssembly プロパティを設定するか または pack:///application:,,,assemblyname;component/ 構文を使用して リソースを読み込むアセンブリを指定します

ですが、デザイナを使わずに elementHost と WPF コントロールを自分で初期化するコードを書いて実行すれば表示されます。
ただ、自分でコードを書いてもデザイナではエラーが出て表示されません。

エラーにある BitmapImage の定義はこれです。
これをつかわなければエラーは出ません。

<UserControl.Resources>
    <BitmapImage x:Key="image" UriSource="pack://application:,,,/Resources/image.png" />
</UserControl.Resources>

質問ですが、デザイナでエラーが出る原因はなんなのでしょうか?
WindowsForms のデザイナはバグやバグにしか思えない仕様がいっぱいなのでその一部なのでしょうか?
対処方法がありましたら教えていただきたいです。

回答

すみません、最初の回答は場所を間違えてました。

WinForms上にWPFコントロールを乗せたことはないですが、
こちらも http://qa.atmarkit.co.jp/q/9978 と同様に、siteoforigin にした場合はどうなりますか?

先の回答でも挙げた https://msdn.microsoft.com/ja-jp/library/aa970494(v=vs.110).aspx の 起点サイトファイルの項における
アセンブリが必要とするファイルが、実行時までわからない場合。 に近い状態かと思われます。

編集 履歴 (2)
  • siteoforiginにしてみましたが、ダメでした。
    エラーに出ていたパスは
    `Microsoft Visual Studio 14.0\Common\IDE\Resources\image.png`
    とIDEの場所を指していたので、正しくパスを扱えていないようです。

    文字数制限があるようなので続きます
    -
  • 書いていませんでしたが、こちらはアセンブリ内に含むアイコンなどのつもりで、resourceや埋め込まれたリソースで試していて、質問文のエラーになりました。

    できればこちらは埋め込むリソースとした場合の対処方法を知りたいです。

    よろしくお願いします。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。