2

我有一个 C# WPF 应用程序,它在 WindowsFormsHost 容器中托管了一个 WinForms 控件。当我运行我的应用程序时,WinForms 控件在其 OnPaint() 事件处理程序中什么也不做,因为 ParentForm 属性为 NULL。在纯 WinForms 项目中,此属性不是 NULL,而是设置为绘制控件的 Form。

在我的 WPF 项目中,由于我不知道如何让 WinForms 控件出现在设计器中,因此我通过项目 XAML 文件添加了该控件。该控件在项目运行时出现,但正如我所说,它永远不会重新绘制,因为它的 ParentForm 属性为 NULL。

在主窗体的 Window_Loaded() 事件中,我尝试将 WinForms 控件的 Parent 属性设置为 XAML 文件中的顶级 Window。我没有使用 ParentForm 属性,因为它是只读的。但是编译器给了我这个错误:

无法将类型“RawDataTestApp.Window1”隐式转换为“System.Windows.Forms.Control”

我假设我收到此错误是因为 Window1 不是控件?无论如何,我不知道如何正确地将 WinForms 控件附加到我的 WPF 项目中的主窗体。我应该怎么做?我在下面包含了项目 XAML 文件的相关部分。它来自一个开源 C# 项目。我在由 WindowsFormsHost 容器托管的项目中添加了一个 WinForms 图形控件:

// 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>
4

0 回答 0