1

リソース ディクショナリを使用する外部プラグインをロードするときに問題が発生します。ユーザー コントロール ライブラリ プロジェクトである外部アセンブリにユーザー コントロールを読み込むために、MEF と遅延読み込みを使用しています。

このユーザー コントロールは、次の方法でリソース ディクショナリを参照し、en export としてマークされます。

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

メイン アプリケーションはプラグインをロードし、次のようにそのリソース ディクショナリをインポートします。

[ImportMany(typeof(ResourceDictionary))]
private IEnumerable<ResourceDictionary> _resourceDictionaries { get; set; }

private void Load()
{
   foreach (var resourceDictionary in _resourceDictionaries)
   {
        Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
   }
}

これは機能し、外部アセンブリからユーザー コントロールとディクショナリを読み込みます。ただし、コントロールのインスタンスを作成するときに、メイン アプリは、参照されている ResourceDictionary が見つからないことを示す例外をスローします。

外部ユーザー コントロール リソース ディクショナリの検索場所をホスト アプリに認識させるにはどうすればよいですか? または、ユーザー コントロールがそのリソースを参照する方法を変更する必要がありますか?

4

1 に答える 1

2

わかりました。リソース ファイルは、ビルド アクションで Resource として設定する必要がありました。

詳細はこちら: マージされた ResourceDictionary を別のアセンブリからロードすると失敗する

于 2013-08-23T08:20:41.917 に答える