WindowsFormsHost Example
This page was last reviewed on Sep 28, 2022.
Dot Net Perls
WindowsFormsHost. Many controls based on Windows Forms exist. We can use any of them in a WPF program with the WindowsFormsHost control.
A compatibility feature. In a WindowsFormsHost 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. Then try adding a Windows Forms control.
Detail All the classics are available—I used a Button. You must prefix the Windows Forms control's name with the "wf" namespace.
Info I specified several attributes of the Windows Forms Button. Windows Forms does not use XAML in most programs, but within WPF it does.
<Window x:Class="WpfApplication19.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" Title="MainWindow" Height="350" Width="525"> <Grid> <WindowsFormsHost HorizontalAlignment="Left" Height="59" Margin="10,10,0,0" VerticalAlignment="Top" Width="163"> <wf:Button Text="Button" Top="0" Left="0" Click="Button_Click" BackColor="AliceBlue" ForeColor="RosyBrown" Font="Consolas" FlatStyle="Flat"/> </WindowsFormsHost> </Grid> </Window>
using System; using System.Windows; namespace WpfApplication19 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, EventArgs e) { // ... Cast as System.Windows.Forms.Button, not // System.Windows.Controls.Button. System.Windows.Forms.Button b = sender as System.Windows.Forms.Button; b.Text = "Clicked"; } } }
A discussion. Only one Windows Forms control can be nested within the WindowsFormsHost. But we can use a control such as TableLayoutPanel that can have sub-controls.
Detail In the example, I added a Click event handler. When the user clicks on the 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.
A 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.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Sep 28, 2022 (edit).
© 2007-2024 Sam Allen.