任何人都可以建议以下代码中可能缺少的内容。我的WinForm上没有显示任何内容。
我已经查看了以下有关此主题的相关帖子,但他们没有为我解决这个问题。
使用ElementHost的WinForm
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
' Load the application modules
Dim unityBootstrapper As New Bootstrapper()
unityBootstrapper.Run()
' Bind the shell to the ElementHost
Dim shellElement = unityBootstrapper.Container.Resolve(Of Shell)()
ehMaster.Child = shellElement
End Sub
引导程序
Public NotInheritable Class Bootstrapper
Inherits UnityBootstrapper
Protected Overrides Function CreateShell() As DependencyObject
Return New Shell
End Function
Protected Overrides Function GetModuleCatalog() As IModuleCatalog
Dim catalog As ModuleCatalog = New ConfigurationModuleCatalog()
catalog.AddModule(GetType(Pitchbook.Excel.ChartWizardModule))
Return catalog
End Function
End Class
贝壳
<UserControl x:Class="Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.codeplex.com/CompositeWPF">
<DockPanel>
<ItemsControl x:Name="HeaderRegion" cal:RegionManager.RegionName="HeaderRegion" DockPanel.Dock="Top" Height="auto">
</ItemsControl>
<ItemsControl x:Name="LeftRegion" cal:RegionManager.RegionName="LeftRegion" Width="auto" DockPanel.Dock="Left">
</ItemsControl>
<ItemsControl x:Name="MainRegion" cal:RegionManager.RegionName="MainRegion" DockPanel.Dock="Bottom">
</ItemsControl>
</DockPanel>
</UserControl>
Partial Public Class Shell
Inherits UserControl
Public Sub New()
InitializeComponent()
End Sub
End Class
ChartWizardModule
Public NotInheritable Class ChartWizardModule
Implements IModule
Private ReadOnly regionManager As IRegionManager
Public Sub Initialize() Implements IModule.Initialize
regionManager.RegisterViewWithRegion("MainRegion", GetType(Test))
End Sub
Public Sub New(regionManager As IRegionManager)
Me.regionManager = regionManager
End Sub
End Class
答案 0 :(得分:0)
我对这篇文章没有给予足够的重视 How to use Prisim within an ElementHost
问题是您需要一个非空的Application.Current,不等于typeof(应用程序)。
因此我创建了以下类
Public Class WpfApplicationAdapter
Inherits Windows.Application
' HACK - This class shouldn't be required. Look out for a resolution to this in future WPF versions.
End Class
并将我的WinForm构造函数更改为以下
Public Sub New()
' This call is required by the designer.
InitializeComponent()
If Application.Current Is Nothing Then
Dim wpfAppAdapter As New WpfApplicationAdapter
End If
' Load the application modules
Dim formBootstrapper As New Bootstrapper
formBootstrapper.Run()
' Get the current instance of shell and bind it to the ElementHost
Dim shellElement = formBootstrapper.Container.Resolve(Of Shell)()
ehMaster.Child = shellElement
End Sub