Я использую WPF MVVM для создания мастера в Excel 2007. Код мастера основан на этом интернационализированном мастере .
Поскольку WPF должен содержаться в ElementHost все мои представления являются пользовательскими элементами управления, там нет App.xaml.Вместо этого я создаю свое приложение WPF, когда создается экземпляр WinForm, и динамически связываю ресурсы моего приложения, как описано здесь .
Private _wpfApplication As Windows.Application
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' WPF application instance
_wpfApplication = Application.Current()
If Application.Current Is Nothing Then
_wpfApplication = New Application()
End If
' Merge in your application resources.
_wpfApplication.Resources.MergedDictionaries.Add(TryCast(Application.LoadComponent(New Uri("Pitchbook.Excel.ChartWizard;Component/Themes/Generic.xaml", UriKind.Relative)), ResourceDictionary))
End Sub
Private Sub ChartWizard_Load(sender As Object, e As System.EventArgs) Handles Me.Load
' Create the WPF UserControl.
Dim uc As New MainWindow()
' Assign the WPF UserControl to the ElementHost control's child property.
ehMaster.Child = uc
End Sub
Это прекрасно работает для одного модуля, который я создал до сих пор.У меня есть много модулей для создания, и вместо того, чтобы иметь контейнер WinForm для каждого модуля, я действительно хотел бы вывести приложение на следующий уровень, создав составное приложение с использованием Prism.Я хочу каким-то образом иметь общий WinForm, который играет аналогичную роль в App.xaml.Когда пользователь нажимает кнопку на моей ленте, я могу запустить этот общий хост WinForm, связать Shell.xaml с ElementHost и использовать загрузчик для загрузки соответствующих модулей на основе какого-либо параметра или конфигурации, которая отображает кнопку ленты на набор модулей, которыедолжен быть загружен в общий хост-контейнер.
Я борюсь с логикой, чтобы сделать это, и я хотел бы получить некоторые мнения относительно осуществимости этого подхода и, если это возможно, наилучшими способами, которыми это может быть сделано.По сути, мне нужно добавить два слоя в красный цвет к существующей архитектуре составного приложения.
http://www.patternjuggler.org/downloads/officecompositeapp.jpg