Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 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