2

WindowsFormsHost コンテナーでホストされている WinForms コントロールを持つ C# WPF アプリがあります。アプリを実行すると、ParentForm プロパティが NULL であるため、WinForms コントロールは OnPaint() イベント ハンドラーで何もしません。純粋な WinForms プロジェクトでは、このプロパティは NULL ではなく、コントロールが描画されたフォームに設定されます。

私の 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