リソース ディクショナリを使用する外部プラグインをロードするときに問題が発生します。ユーザー コントロール ライブラリ プロジェクトである外部アセンブリにユーザー コントロールを読み込むために、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 が見つからないことを示す例外をスローします。
外部ユーザー コントロール リソース ディクショナリの検索場所をホスト アプリに認識させるにはどうすればよいですか? または、ユーザー コントロールがそのリソースを参照する方法を変更する必要がありますか?