Home | Contact Us
<< Back to WPF
WPF WindowsFormsHost Example
WindowsFormsHost. Many controls based on Windows Forms exist. We can use any of them in a WPF program with the WindowsFormsHost control. In it, we specify Windows Forms controls in XAML. Only one control can be nested in it.
To start, please add a "xmlns wf" attribute to the Window element. The "wf" part is just a namespace we specify—other names can instead be used. Next, drag a WindowsFormsHost control to the application.
Tip: Try adding a Windows Forms control. All the classics you know and love are available—I used a Button.Button
Note: You must prefix the Windows Forms control's name with the "wf" namespace. This is an XML syntax feature.
Info: I specified several attributes of the Windows Forms Button. Windows Forms does not use XAML in most programs, but within WPF it does.
Example markup: XAML
Title="MainWindow" Height="350" Width="525">
<WindowsFormsHost HorizontalAlignment="Left" Height="59" Margin="10,10,0,0"
<wf:Button Text="Button" Top="0" Left="0" Click="Button_Click"
Example code: C#
public partial class MainWindow : Window
private void Button_Click(object sender, EventArgs e)
// ... Cast as System.Windows.Forms.Button, not
System.Windows.Forms.Button b = sender as System.Windows.Forms.Button;
b.Text = "Clicked";
Only one Windows Forms control can be nested within the WindowsFormsHost. But this can be worked around by using a control such as TableLayoutPanel that can have sub-controls. In the example, I added a Click event handler.TableLayoutPanel
So: When the user clicks on the oddly-colored Windows Forms Button, the Button_Click event handler runs.
And: The Text attribute of the Button is changed to the word "Clicked." This is not a WPF Button, which uses Content.TextButton: WPF
Discussion. This article does not cover all the complexity of WindowsFormsHost. I leave most of that up to Microsoft. It is thoughtful that Microsoft makes WPF programs support (to some extent) Windows Forms controls.
Quote: Use the WindowsFormsHost element to place a Windows Forms control within your WPF element or page.WindowsFormsHost Class: Microsoft Docs
Summary. Based on my experiment with WindowsFormsHost, it seems that avoiding this element is an ideal choice. Using it introduces a lot of extra complexity. For example, the Button type has to be specified as one from Windows Forms.