5

インポートウィザードが開いたときに動的にロードされるインポートMEFコンポーネントがあります。ユーザーが処理するインポートのタイプを選択するとすぐに、インポートウィザードダイアログの制御が選択したインポートコンポーネントに渡されます。もちろん、インポートコンポーネントは、ウィザードダイアログにリソースを提供する必要があります(例:DataTemplates)。現時点では、これはDataTemplateSelectorインポートコンポーネントによって提供されるsを介して実装されています。ResourceDictionaryインポートコンポーネントのアセンブリのローカルにアクセスします。

ただし、ご想像のとおり、これは面倒です。提供するすべてのコードを追加する必要があります。WPFは、表示されている種類によってDataTemplate自動的に権利を使用しません。DataTemplateViewModel

誰かが以前にこの問題を解決したことがありますか?プラグイン環境でリソースをどのように提供しますか?

よろしくお願いします。

よろしくお願いします

4

2 に答える 2

14

この小さなトリックをどこで見つけたかがわかりませんが、外部アセンブリを作成するときにリソースディクショナリを動的にインポートすることができます。

リソースを含む各アセンブリで、コードビハインドを実行し、次のように注釈を付けることで、1つ以上のResourceDictionaryオブジェクトをエクスポートします。

[Export(typeof(ResourceDictionary))]
public partial class Resources : ResourceDictionary
{
    public Resources()
    {
        InitializeComponent();
    }
}

[ImportMany] IEnumerable<ResourceDictionary> resourceDictionariesここで、を解決して次のようなことを行うコンポーネントが必要です。

        //Merge exported resource dictionaries from all composed sources into the application
        foreach (var resourceDictionary in resourceDictionaries)
        {
            Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
        }
于 2012-05-10T13:35:27.123 に答える
0

インポートしたコンポーネントがアプリケーションの特定の領域にのみ含まれる場合は、コンポーネントが配置される領域を表すFrameworkElementのリソースにコンポーネントのルートViewModelのDataTemplateのみを追加できます。他のすべてのDataTemplates(インポートされたコンポーネントの他のViewModelsの場合)は、コンポーネントのルートViewModelのDataTemplateのリソースに含まれます。

于 2012-05-10T10:16:56.417 に答える