Click here to Skip to main content
Email Password   helpLost your password?

Introduction

In one of our last articles the author described how to embed WinForms-Controls into WPF. This one explains the other way around: how can one integrate a WPF-UserControl into WinForms. In the example, a scaleable WPF-image is hosted in a WinForms-Dialog.

The Concept

For hosting a WPF-Usercontrol in WinForms you can use the control ElementHost that resides in the namespace System.Windows.Forms.Integration. This control has a property called Child to which you can assign an instance of an UIElement.

The Project

Here is the XAML for our ScaleableImageControl. It is very simple, just an image with a BitmapEffect:

<UserControl x:Class="ScaleableImageControl.ScaleableImageCtrl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">

        <Image Margin="10" x:Name="img" Stretch="Uniform" Opacity="1">
            <Image.BitmapEffect>
                <DropShadowBitmapEffect Opacity="1" />

            </Image.BitmapEffect>
        </Image>

</UserControl>

Now, we add two methods to the Usercontrol that we will call from the Windows Forms dialog:

public void SetSource(string fileName)
{
    img.Source = new BitmapImage(new Uri(fileName));
}

public void SetOpacity(double opacity)
{
    img.Opacity = opacity;
}

We are able to set the opacity and the displayed image with this interface.

Hosting the WPF-control in WinForms

When opening the Winforms dialog in the designer of VS 2008 you will realize that there is a ScaleableImageControl in the toolbox:

WPF_Winforms_2.jpg

You can drag it into your Winforms dialog. An ElementHost-instance and a ScaleableImageControl-instance is created for you, the ScaleableImageControl-object is assigned to the Child-property of the ElementHost-object. VS 2008 helps us a lot here. At last we need some controls to interact we the ScaleableImageControl-object (assigning images and setting the opacity):

WPF_Winforms_3.jpg

Here is the code for interaction:

private void udOpacity_ValueChanged(object sender, EventArgs e)
{
    scaleableImageCtrl1.SetOpacity( (double) udOpacity.Value);
}

private void btnBrowse_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        try
        {
            scaleableImageCtrl1.SetSource(openFileDialog1.FileName);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

It is not a big deal to integrate WPF in Winforms. Try it, the project is attached. Have fun!

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralHelp
Shashuma
16:36 18 Aug '09  
Hi codegod.de
Great Article. I was just having headache of adding WPF usercontrols in WinForms.

I'm developing a image viewer application using C# WinForms at the moment. I'm trying to have a flash smooth interface for the viewer. That's when I started looking into WPF. In your source code, you have a seperate folder called "ScaleableImageControl". How did you create this folder?Did you just add a new WPF project to the WinForm project? How did you create the ScaleableImageControl.dll file?

Thanks
Generaldancing around the subject
Kalor
20:28 10 Mar '09  
What a godawful article. The reader only wants to know one thing (how to get a usercontrol into winforms) and you DON'T SAY HOW. What, it just magically appears in my toolbox, does it??Mad
GeneralFehler in C#
dherrmann
23:46 26 May '08  
Hallo,
habe deine demo heruntergeladen und gestartet.
bekomme aber leider den fehler:
Warnung 2 Die Komponente "ScaleableImageControl", auf die verwiesen wird, wurde nicht gefunden.

was ist zu tun?

grüße-
dietrich
GeneralRe: Fehler in C#
codegod.de
19:52 27 May '08  
Hi,

you have to open the solution in VS 2008 and build it. Works fine for me.

Visit my page www.codegod.de

GeneralPerformance Repercussions?
Dominick O'Dierno
15:20 23 May '08  
Is there any performance impact to this? how much slower would a control with lots of animation be than within a standard WPF app?

Free the mallocs!


Last Updated 23 May 2008 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2010