我有一个C#WPF应用程序,它在WindowsFormsHost容器中托管了一个WinForms控件。当我运行我的应用程序时,WinForms控件在其OnPaint()事件处理程序中不执行任何操作,因为ParentForm属性为NULL。在纯WinForms项目中,此属性不是NULL并且设置为绘制控件的窗体。
在我的WPF项目中,由于我无法弄清楚如何让WinForms控件出现在Designer中,我通过项目XAML文件添加了控件。项目运行时会出现控件,但正如我所说,它永远不会重新绘制,因为它的ParentForm属性为NULL。
在主窗体的Window_Loaded()事件中,我尝试将WinForms控件的Parent属性设置为XAML文件中的顶级窗口。我没有使用ParentForm属性,因为它是只读的。但是编译器给了我这个错误:
无法将类型'RawDataTestApp.Window1'隐式转换为'System.Windows.Forms.Control'
我假设我收到此错误,因为Window1不是控件?无论如何,我不知道如何将WinForms控件正确附加到我的WPF项目中的主窗体。我该怎么做? 我在下面列出了项目XAML文件的相关部分。它来自一个开源的C#项目。我将一个WinForms图形控件添加到由WindowsFormsHost容器托管的项目中:
// Here's the source line that gets the error. pdeAffectiv is the WinForms graphcontrol that is hosted in a WindowsFormsHost container:
pdeAffectiv.Parent = MainForm;
// -------------------------- WPF Project XAML file ----------------------------------
<!-- Copyright © 2010 James Galasyn -->
<Window x:Name="MainForm" x:Class="RawDataTestApp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="EmotivEngine Realtime Client" Height="454" Width="1042" Background="#FF000033" Foreground="#FF33FFFF" xmlns:emoclient="clr-namespace:EmoEngineClientLibrary;assembly=EmoEngineClientLibrary"
xmlns:eecontrol="clr-namespace:EmoEngineControlLibrary;assembly=EmoEngineControlLibrary"
xmlns:local="clr-namespace:RawDataTestApp" Loaded="Window_Loaded" Closing="Window_Closing"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:graphlib="clr-namespace:GraphLib;assembly=GraphLib">
<Grid>
<!--- CONTENTS SNIPPED FOR BREVITY -->
<WindowsFormsHost x:Name="wfhAffectiv" HorizontalAlignment="Left" Height="148" Margin="530,75.493,0,0" VerticalAlignment="Top" Width="471" >
<graphlib:PlotterDisplayEx x:Name="pdeAffectiv" >
</graphlib:PlotterDisplayEx>
</WindowsFormsHost>
</Grid>
</Window>