Click here to Skip to main content
Click here to Skip to main content

Tagged as

Host Windows Form Controls in WPF

, 24 Nov 2010
Rate this:
Please Sign up or sign in to vote.
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:

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:

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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

GPUToaster™
Other
India India
http://gputoaster.wordpress.com/about
Follow on   Twitter

Comments and Discussions

 
GeneralYes you are right. Ideally you should perform it while desig... PinmemberGPUToaster25-Nov-10 3:05 
GeneralReason for my vote of 2 Why do this in code? This should be ... PinmemberSledgeHammer0124-Nov-10 13:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140827.1 | Last Updated 24 Nov 2010
Article Copyright 2010 by GPUToaster™
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid