2012-05-23 27 views
5

Tôi đang di chuyển một phần của dự án WinForms vào WPF.Làm thế nào để thêm WinForm User Control vào WPF để tôi có thể tham khảo nó trong tệp xaml.cs

Tôi muốn thêm một Kiểm soát người dùng WinForms hiện có vào Biểu mẫu WPF. Điều khiển người dùng WinForm được gọi là "TicketPrinter" và sống trong cùng một dự án với dạng WPF.

Trong XAML của tôi, tôi có dòng này:

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

Và sau đó tôi sử dụng nó trong XAML của tôi ở đây:

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

Khi tôi chạy dự án điều khiển người dùng xuất hiện trên các hình thức như mong đợi .

Nhưng khi tôi đi vào mã phía sau tệp xaml.cs và cố gắng truy cập "ZapTicketPrinter", nó không có sẵn làm tham chiếu.

tức là

Tôi thử sử dụng ZapTicketPrinter và không được nhận dạng.

Tôi cũng đã thử như sau:

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

nhưng có được một null

tôi thiếu gì? Làm cách nào để tham chiếu tên trong mã của tôi?

Trả lời

7

cung cấp x: Tên thay vì máy in: tên

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

MSDN mẫu

Sử dụng mã đằng sau
http://msdn.microsoft.com/en-us/library/ms751761.aspx
Walkthrough: Hosting a Windows Forms Control in WPF

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

+0

@ConnorMcGuinness Tôi đã cập nhật các liên kết – Athafoud

3

Hãy thử sử dụng đoạn mã sau:

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); 
} 
Các vấn đề liên quan