Condividi tramite


Procedura: hosting di un controllo Windows Presentation Foundation in Windows Form tramite ElementHost

Aggiornamento: novembre 2007

La classe ElementHost consente l'hosting di un controllo Windows Presentation Foundation (WPF) in Windows Form. Quando si consente l'hosting di un controllo, è possibile ricevere gli eventi e accedere alle proprietà esposte del controllo. Il modo più semplice per l'hosting di un controllo WPF consiste nell'aggiungere un controllo Panel al form e successivamente nel consentire l'hosting del controllo WPF in Panel. Questa operazione viene generalmente effettuata nel gestore eventi Load del form.

Nell'esempio di codice seguente viene illustrato come utilizzare il controllo ElementHost per consentire l'hosting di un controllo WPF in Windows Form. Inoltre, viene illustrato come allegare gestori a due degli eventi OnButtonClick personalizzati del controllo. Per l'esempio completo, vedere Esempio di hosting di controlli semplici di Windows Presentation Foundation in Windows Form.

Nota

Il controllo ospitato non è completamente inizializzato al momento dell'evento Load del form. L'evento Loaded del controllo, che si verifica successivamente, indica che il controllo è stato inizializzato. Nell'esempio, un gestore viene allegato all'evento Loaded del controllo, poiché deve acquisire i valori iniziali di molte proprietà che non sono definiti al momento dell'evento Load del form.

Esempio

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

Vedere anche

Attività

Procedura dettagliata: hosting di controlli compositi di Windows Presentation Foundation in Windows Form

Procedura dettagliata: hosting di controlli Windows Form in Windows Presentation Foundation

Esempio di hosting di controlli semplici di Windows Presentation Foundation in Windows Form

Concetti

Procedura dettagliata: hosting di controlli di Windows Presentation Foundation in Windows Form

Riferimenti

ElementHost

WindowsFormsHost

Altre risorse

Procedure relative a migrazione e interoperabilità