Как внедрить представления WPF в окна, вызываемые из надстройки VSTO Prism 7 - PullRequest
0 голосов
/ 11 января 2019

Я создаю большое настольное приложение WPF с использованием Prism 7, и мне нужно создать несколько надстроек VSTO для Word и Excel, которые являются небольшими частями большего целого. Я хочу использовать Prism 7, чтобы внедрить мои уже созданные виды и модели представления в окно xaml, которое отображается при нажатии кнопки на ленте.

Я не знаю, где инициализировать загрузчик, поскольку я не знаком с надстройками VSTO.

Я уже создал загрузчик, который настраивает каталог модулей с правильными модулями, которые содержат необходимые представления. Bootstrapper выглядит следующим образом.

public sealed class Bootstrapper : PrismApplication
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>(); //Where MainWindow is the window that should be shown when the button is clicked.
    }

    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
        base.ConfigureModuleCatalog(moduleCatalog);

        moduleCatalog.AddModule(typeof(MyModule)); //Where MyModule is the Prism module for the project that contains the views I want to inject
    }
}

Когда я инициализирую загрузчик из файла ThisAddIn.cs, как показано ниже, загрузчик правильно создает себя и настраивает каталог модулей. После этого контейнер может разрешить RegionManager, но он также автоматически отображает главное окно пользователю.

public partial class ThisAddIn
{
    private Bootstrapper _bootstrapper;

    private void ThisAddIn_Startup(object sender, EventArgs e)
    {
        _bootstrapper = new Bootstrapper(); //MainWindow is displayed after everything runs
    }
}

Если я оставлю MainWindow открытым и нажму кнопку, которая должна добавить представления в MainWindow, представления будут введены правильно. Однако я, очевидно, не хочу автоматически отображать пустое окно каждый раз, когда пользователь открывает документ Word. Есть ли способ запретить Bootstrapper показывать MainWindow в этот момент или есть лучший способ сделать это?

...