WPF FAQ - Win32 in WPF

Find answers for the most frequently asked questions
Expand All Collapse All

You can choose to keep your Windows Forms application primarily intact and migrate portions of your application to WPF where it makes sense. You can do this by identifying those areas of your application that are a good fit for WPF features and convert only those areas to WPF. For example, you may want to convert only a few of your forms to WPF and keep the rest of the application based on Windows Forms. Using this method, you could simply popup instances of WPF pages or windows from your Windows Forms application. Additionally, you may want to actually swap-out Windows Forms controls for WPF controls on a form resulting in a hybrid form when the controls co-exist in peaceful harmony.

Permalink

You can choose to keep your Windows Forms application primarily intact and migrate portions of your application to WPF where it makes sense. You can do this by identifying those areas of your application that are a good fit for WPF features and convert only those areas to WPF. For example, you may want to convert only a few of your forms to WPF and keep the rest of the application based on Windows Forms. Using this method, you could simply popup instances of WPF pages or windows from your Windows Forms application. Additionally, you may want to actually swap-out Windows Forms controls for WPF controls on a form resulting in a hybrid form when the controls co-exist in peaceful harmony.

Permalink

You can have a WPF application popup a Windows Form much in the same way that you can popup a WPF window from a Windows Forms application. Furthermore, you can place Windows Forms controls side-by-side with WPF controls on a WPF window or page-by-page using the WindowsFormsHost control that ships as part of the interoperability layer.

Permalink

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 :

[C#]

//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:

[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 provides a way to create a tag that you can use as a 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 maps back to these prefixes as given below :

[XAML]

        <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>

Permalink

Share with

Couldn't find the FAQs you're looking for?

Please submit your question and answer.