Gewusst wie: Hosten eines Windows Presentation Foundation-Steuerelements in Windows Forms mit ElementHost
Aktualisiert: November 2007
Die ElementHost-Klasse ermöglicht es Ihnen, in Windows Forms ein Windows Presentation Foundation (WPF)-Steuerelement zu hosten. Wenn Sie das Steuerelement hosten, können Sie Ereignisse empfangen und auf die verfügbar gemachten Eigenschaften des Steuerelements zugreifen. Die einfachste Möglichkeit, ein WPF-Steuerelement zu hosten, besteht darin, ein Panel-Steuerelement zum Formular hinzuzufügen und dann das WPF-Steuerelement im Panel zu hosten. Dies geschieht in der Regel im Load-Ereignishandler des Formulars.
Im folgenden Codebeispiel wird veranschaulicht, wie das ElementHost-Steuerelement verwendet wird, um ein WPF-Steuerelement in Windows Forms zu hosten. Es zeigt auch, wie Handler an zwei der benutzerdefinierten OnButtonClick-Ereignisse des Steuerelements angefügt werden. Das vollständige Beispiel finden Sie unter Beispiel für das Hosten eines einfachen Windows Presentation Foundation-Steuerelements in Windows Forms.
Tipp
Das gehostete Steuerelement wird zum Zeitpunkt des Load-Ereignisses des Formulars nicht vollständig initialisiert. Das später eintretende Loaded-Ereignis des Steuerelements gibt an, dass das Steuerelement initialisiert wurde. Im Beispiel wird ein Handler an das Loaded-Ereignis des Steuerelements angefügt, da es die Anfangswerte von verschiedenen Eigenschaften abrufen muss, die zum Zeitpunkt des Load-Ereignisses des Formulars nicht definiert sind.
Beispiel
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;
}
}
}