6

WinFormsプロジェクトの一部をWPFに移行しています。

既存のWinFormsユーザーコントロールをWPFフォームに追加したいと思います。WinFormユーザーコントロールは「TicketPrinter」と呼ばれ、WPFフォームと同じプロジェクトに存在します。

私のxamlには、次の行があります。

xmlns:Printers="clr-namespace:Project.UserControls.Printers"

そして、ここでxamlで使用します。

        <WindowsFormsHost Height="430" HorizontalAlignment="Left" Margin="468,12,0,0" Name="windowsFormsHost1" VerticalAlignment="Top" Width="324">
            <Printers:TicketPrinter Printers:Name="ZapTicketPrinter">
            </Printers:TicketPrinter>
        </WindowsFormsHost> 
    </Grid>
</Window>

プロジェクトを実行すると、ユーザーコントロールが期待どおりにフォームに表示されます。

しかし、xaml.csファイルの背後にあるコードにアクセスして、「ZapTicketPrinter」にアクセスしようとすると、参照として使用できません。

すなわち

ZapTicketPrinterを使用してみましたが、認識されません。

私も次のことを試しました:

TicketPrinter ticketPrinter = this.FindName("ZapTicketPrinter") as TicketPrinter;

しかし、nullを取得します

私は何が欠けていますか?コードで名前を参照するにはどうすればよいですか?

4

2 に答える 2

11

printer:name の代わりに x:Name を指定します

<WindowsFormsHost>
    <Printers:TicketPrinter x:Name="ZapTicketPrinter"/>
</WindowsFormsHost>

MSDN サンプル

コード ビハインド
http://msdn.microsoft.com/en-us/library/ms751761.aspx
の使用チュートリアル: WPF で Windows フォーム コントロールをホストする

xamlの使用
http://msdn.microsoft.com/en-us/library/ms742875.aspx
チュートリアル: XAML を使用して WPF で Windows フォーム コントロールをホストする

于 2012-05-23T09:43:29.697 に答える
3

次のコードを使用してみてください。

private void LoadWFUserControl() 
{
    // Initialize a Host Control which allows hosting a windows form control on WPF. Ensure that the WindowsFormIntegration Reference is present.
    System.Windows.Forms.Integration.WindowsFormsHost host =
        new System.Windows.Forms.Integration.WindowsFormsHost();

    // Create an object of your User control.
    MyWebcam uc_webcam = new MyWebcam();

    // Assign MyWebcam control as the host control's child.
    host.Child = uc_webcam;

    // Add the interop host control to the Grid control's collection of child controls. Make sure to rename grid1 to appr
    this.grid1.Children.Add(host);
}
于 2015-08-31T10:33:32.560 に答える