Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Host Windows Form Controls in WPF

0.00/5 (No votes)
24 Nov 2010 2  
Include Windows Form Controls in WPF

Windows Presentation foundation or WPF provides a rich set of GUI components that are hardware accelerated. Still there comes a time when you are required to put a Windows Form Control into your WPF application. Of course you do not want to re-program your user control just because the technology is changing. By not re-programming it means that you are saving your time and investments you have done on creating a Windows Form control.


I myself faced this problem when I was instructed to include a Webcam control which was purely a Windows form user control. Any ways here's the code:


C#
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.
    this.grid1.Children.Add(host);
}

VICE-VERSA


The other way round is also possible i.e. HOSTING A WPF CONTROL IN WINDOWS FORMS APPLICATION.


Follow these steps:



  1. Make a WPF user control DLL (say for example MyControl.dll)
    • Add reference of this DLL to your Windows Form Application.

    • Add reference of following to your project (required for WPF)


    • PresentationCore
    • PresentationFramework
    • System.Xaml
    • WindowsBase
    • WindowsFormsIntegration


Example:


C#
void LoadAPFControl()
{
    //Create and configure your WPF control instance
    System.Windows.Controls.TextBox wpfTextBox =
            new System.Windows.Controls.TextBox();
        wpfTextBox.Name = "txName";
        wpfTextBox.Text = "WPF TextBox";
        wpfTextBox.TextChanged +=
            new TextChangedEventHandler(textbox_TextChanged);
    //Create element host control so as to use WPF control on Windows Form
    ElementHost elementHost = new ElementHost();
    elementHost.Dock = DockStyle.None;
    elementHost.Width = 150;
    elementHost.Height = 50;
    // Assign the control as the host control's child.
    elementHost.Child = wpfTextBox;
 
    // Finally, Add the interop host control to the panel container control's collection of child controls.
    containerPanel.Controls.Add(elementHost);
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here