2012-05-23 39 views
5

Estoy migrando parte de un proyecto de WinForms a WPF.Cómo agregar el Control de usuario de WinForm en WPF para que pueda hacer referencia en el archivo xaml.cs

Quiero agregar un control de usuario WinForms existente en un formulario WPF. El control de usuario de WinForm se llama "TicketPrinter" y vive en el mismo proyecto que el formulario WPF.

En mi xaml tengo esta línea:

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

Y entonces lo uso en mi xaml aquí:

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

Cuando ejecuto el proyecto aparece el control de usuario en el formulario como se esperaba .

Pero cuando voy al código detrás del archivo xaml.cs e intento acceder a "ZapTicketPrinter", no está disponible como referencia.

decir

Intento usando ZapTicketPrinter y no se reconoce.

También he intentado lo siguiente:

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

pero conseguir un nulo

¿Qué me falta? ¿Cómo hago referencia al nombre en mi código?

Respuesta

7

proporcionan x: Nombre vez de impresora: nombre

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

MSDN Muestra

Usando código detrás
http://msdn.microsoft.com/en-us/library/ms751761.aspx
Walkthrough: Hosting a Windows Forms Control in WPF

Usando xaml
http://msdn.microsoft.com/en-us/library/ms742875.aspx
Walkthrough: Hosting a Windows Forms Control in WPF by Using XAML

+0

@ConnorMcGuinness He actualizado los enlaces – Athafoud

3

Trate de usar siguiente código:

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); 
} 
Cuestiones relacionadas