Partager via


Comment : héberger un contrôle Windows Presentation Foundation dans les Windows Forms à l'aide d'ElementHost

Mise à jour : novembre 2007

La classe ElementHost vous permet d'héberger un contrôle Windows Presentation Foundation (WPF) dans Windows Forms. Lorsque le contrôle est hébergé, vous pouvez recevoir des événements et accéder aux propriétés exposées du contrôle. La méthode la plus simple pour héberger un contrôle WPF est d'ajouter un contrôle Panel à votre formulaire, puis d'héberger le contrôle WPF dans le Panel. Cela s'effectue généralement dans le gestionnaire d'événements Load de votre formulaire.

L'exemple de code suivant montre comment utiliser le contrôle ElementHost pour héberger un contrôle WPF dans les Windows Forms. Il indique comment joindre des gestionnaires à deux des événements OnButtonClick personnalisés du contrôle. Pour l'exemple complet, consultez Hébergement d'un contrôle Windows Presentation Foundation simple dans les Windows Forms, exemple.

Remarque :

Le contrôle hébergé n'est pas complètement initialisé au moment de l'événement Load du formulaire. L'événement Loaded du contrôle, qui se produit ultérieurement, indique que le contrôle a été initialisé. Dans cet exemple, le gestionnaire est attaché à l'événement Loaded du contrôle, car il doit acquérir les valeurs initiales de plusieurs propriétés qui ne sont pas définies au moment de l'événement Load du formulaire.

Exemple

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Controls;
using System.Windows.Forms.Integration;
using System.Windows.Media;

namespace WFHost
{
    partial class Form1 : Form
    {
        private ElementHost ctrlHost;
        private MyControls.Page1 avAddressCtrl;
        System.Windows.FontWeight initFontWeight;
        double initFontSize;
        System.Windows.FontStyle initFontStyle;
        System.Windows.Media.SolidColorBrush initBackBrush;
        System.Windows.Media.SolidColorBrush initForeBrush;
        FontFamily initFontFamily;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ctrlHost = new ElementHost();
            ctrlHost.Dock = DockStyle.Fill;
            panel1.Controls.Add(ctrlHost);
            avAddressCtrl = new MyControls.Page1();
            avAddressCtrl.InitializeComponent();
            ctrlHost.Child = avAddressCtrl;

            avAddressCtrl.OnButtonClick += 
                new MyControls.Page1.MyControlEventHandler(
                avAddressCtrl_OnButtonClick);
            avAddressCtrl.Loaded += new RoutedEventHandler(
                avAddressCtrl_Loaded);
        }

        void avAddressCtrl_Loaded(object sender, EventArgs e)
        {
            initBackBrush = (SolidColorBrush)avAddressCtrl.MyControl_Background;
            initForeBrush = avAddressCtrl.MyControl_Foreground;
            initFontFamily = avAddressCtrl.MyControl_FontFamily;
            initFontSize = avAddressCtrl.MyControl_FontSize;
            initFontWeight = avAddressCtrl.MyControl_FontWeight;
            initFontStyle = avAddressCtrl.MyControl_FontStyle;
        }

        void avAddressCtrl_OnButtonClick(
            object sender, 
            MyControls.MyControlEventArgs args)
        {
            if (args.IsOK)
            {
                lblAddress.Text = "Street Address: " + args.MyStreetAddress;
                lblCity.Text = "City: " + args.MyCity;
                lblName.Text = "Name: " + args.MyName;
                lblState.Text = "State: " + args.MyState;
                lblZip.Text = "Zip: " + args.MyZip;
            }
            else
            {
                lblAddress.Text = "Street Address: ";
                lblCity.Text = "City: ";
                lblName.Text = "Name: ";
                lblState.Text = "State: ";
                lblZip.Text = "Zip: ";
            }
        }

        private void radioBackgroundOriginal_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_Background = initBackBrush;
        }

        private void radioBackgroundLightGreen_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_Background = new SolidColorBrush(Colors.LightGreen);
        }

        private void radioBackgroundLightSalmon_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_Background = new SolidColorBrush(Colors.LightSalmon);
        }

        private void radioForegroundOriginal_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_Foreground = initForeBrush;
        }

        private void radioForegroundRed_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_Foreground = new System.Windows.Media.SolidColorBrush(Colors.Red);
        }

        private void radioForegroundYellow_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_Foreground = new System.Windows.Media.SolidColorBrush(Colors.Yellow);
        }

        private void radioFamilyOriginal_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontFamily = initFontFamily;
        }

        private void radioFamilyTimes_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontFamily = new FontFamily("Times New Roman");
        }

        private void radioFamilyWingDings_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontFamily = new FontFamily("WingDings");
        }

        private void radioSizeOriginal_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontSize = initFontSize;
        }

        private void radioSizeTen_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontSize = 10;
        }

        private void radioSizeTwelve_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontSize = 12;
        }

        private void radioStyleOriginal_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontStyle = initFontStyle;
        }

        private void radioStyleItalic_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontStyle = System.Windows.FontStyles.Italic;
        }

        private void radioWeightOriginal_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontWeight = initFontWeight;
        }

        private void radioWeightBold_CheckedChanged(object sender, EventArgs e)
        {
            avAddressCtrl.MyControl_FontWeight = FontWeights.Bold;
        }
    }
}

Voir aussi

Tâches

Procédure pas à pas : hébergement d'un contrôle composite Windows Presentation Foundation dans les Windows Forms

Procédure pas à pas : hébergement d'un contrôle Windows Forms dans Windows Presentation Foundation

Hébergement d'un contrôle Windows Presentation Foundation simple dans les Windows Forms, exemple

Concepts

Procédure pas à pas : hébergement d'un contrôle Windows Presentation Foundation dans les Windows Forms

Référence

ElementHost

WindowsFormsHost

Autres ressources

Rubriques Comment relatives à la migration et à l'interopérabilité