dotnetmonitor.com

 
Index
Previous
Next

 

First make sure to add references to System.Windows.Forms and System.Windows.Forms.Integration. Then you need to decide if you will use code, XAML or a combination of both to work with the Windows Forms controls. If you are strictly using code, you would write code similar to the following:

 

//Instantiate the hosting control

WindowsFormsHost host = new WindowsFormsHost();

 

//Instantiate the Windows Forms control, in this case a button

System.Windows.Forms.Button wfButton = new System.Windows.Forms.Button();

wfButton.Text = "Windows Forms Button";

 

// Add the Windows Forms button to the host control

host.Children.Add(wfButton);

 

// Add the host control to the WPF element that you want to parent the control,

// in this case it's a Grid

this.grid1.Children.Add(host);

 

If you are using XAML, you still need to add the references to System.Windows.Forms and System.Windows.Forms.Integration, but you will also need to add mapping statements to your XAML that will allow you to refer to the objects that live in these namespaces via XAML:

 

<?Mapping XmlNamespace="wfi" ClrNamespace="System.Windows.Forms.Integration" Assembly="WindowsFormsIntegration"?>

<?Mapping XmlNamespace="wf" ClrNamespace="System.Windows.Forms" Assembly="System.Windows.Forms"?>

 

The XmlNamespace property provide you a way to create a tag that you can use as namespace prefix in the XAML to refer to the controls within the System.Windows.Forms and System.Windows.Forms.Integration namespaces. To enable this, you must also create xmlns properties in the XAML that map back to these prefixes:

 

<Window x:Class="AvalonApplication17.Window1"

xmlns="http://schemas.microsoft.com/winfx/avalon/2005"

xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"

xmlns:wfi="wfi"

xmlns:wf="wf"

Title="AvalonApplication17"

Loaded="WindowLoaded"

>

 

Then you can use XAML to instantiate the WindowsFormsHost control and its subsequent child controls:

 

<Grid x:Name="grid1">

<wfi:WindowsFormsHost>

<wf:Button Text="Windows Forms Button"/>

</wfi:WindowsFormsHost>

</Grid>

How can I leverage my current investment in Windows Forms applications and still tap into the cool features of WPF?
Can I use Windows Forms in a WPF application?
What about user controls and third-party controls including ActiveX controls?
I cant seem to find System.Windows.Forms.Integration, where do I find it?
How do I host a WPF control in a Windows Forms application?