Compartir a través de


Cómo: Hospedar un control de Windows Presentation Foundation en formularios Windows Forms mediante el uso de ElementHost

Actualización: noviembre 2007

La clase ElementHost permite hospedar un control de Windows Presentation Foundation (WPF) en formularios Windows Forms. Al hospedar el control, puede recibir los eventos y obtener acceso las propiedades expuestas del control. La manera más simple de hospedar un control de WPF es agregar un control Panel al formulario y, a continuación, hospedar el control de WPF en Panel. Esto se suele hacer en el controlador de eventos Load del formulario.

En el ejemplo de código siguiente se muestra cómo utilizar el control ElementHost para hospedar un control de WPF en formularios Windows Forms. También se muestra cómo asociar controladores a dos de los eventos OnButtonClick personalizados del control. Consulte Ejemplo Hosting a Simple Windows Presentation Foundation Control in Windows Forms para obtener el ejemplo completo.

Nota

El control hospedado no se inicializa totalmente cuando se produce el evento Load del formulario. El evento Loaded del control, que se produce después, indica que el control se ha inicializado. En el ejemplo se asocia un controlador al evento Loaded del control porque necesita adquirir los valores iniciales de varias propiedades que no están definidas cuando se produce el evento Load del formulario.

Ejemplo

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

Vea también

Tareas

Tutorial: Hospedar un control compuesto de Windows Presentation Foundation en formularios Windows Forms

Tutorial: Hospedar un control de formularios Windows Forms en Windows Presentation Foundation

Ejemplo Hosting a Simple Windows Presentation Foundation Control in Windows Forms

Conceptos

Tutorial: Hospedar un control de Windows Presentation Foundation en formularios Windows Forms

Referencia

ElementHost

WindowsFormsHost

Otros recursos

Temas "Cómo..." de migración e interoperabilidad