2012-05-23 8 views
5

Przenoszę część projektu WinForms do WPF.Jak dodać kontrolkę użytkownika WinForm do pliku WPF, aby móc odwoływać się do niego w pliku xaml.cs

Chcę dodać istniejącą formant użytkownika WinForms do formularza WPF. Formant użytkownika WinForm nazywa się "TicketPrinter" i żyje w tym samym projekcie, co formularz WPF.

W moim XAML Mam ten wiersz:

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

a następnie używać go w moim XAML tutaj:

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

Kiedy uruchomić projekt na formularzu pojawi się kontrola użytkownika, jak oczekiwano .

Ale kiedy wchodzę w kod za plikiem xaml.cs i próbuję uzyskać dostęp do "ZapTicketPrinter", nie jest on dostępny jako odniesienie.

tj

staram użyciu ZapTicketPrinter i nie jest rozpoznawany.

Ja również próbowałem następujące:

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

ale dostać null

Czego mi brakuje? Jak mogę podać nazwę w moim kodzie?

Odpowiedz

7

zapewnić X: Nazwa zamiast drukarki: nazwa

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

MSDN próbkę

Korzystanie kod za
http://msdn.microsoft.com/en-us/library/ms751761.aspx
Walkthrough: Hosting a Windows Forms Control in WPF

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

+0

@ConnorMcGuinness I zostały zaktualizowane linki – Athafoud

3

Spróbuj użyć następującego kodu:

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); 
} 
Powiązane problemy