共用方式為


HOW TO:使用 ElementHost 在 Windows Form 中裝載 Windows Presentation Foundation 控制項

更新:2007 年 11 月

ElementHost 類別可以讓您在 Windows Form 中裝載 Windows Presentation Foundation (WPF) 控制項。裝載這個控制項時,您可以收到事件並存取這個控制項公開的屬性。裝載 WPF 控制項最簡單的方法是將 Panel 控制項加入至表單,然後在 Panel 中裝載 WPF 控制項。您通常會在表單的 Load 事件處理常式中執行這個動作。

下列程式碼範例示範如何使用 ElementHost 控制項在 Windows Form 中裝載 WPF 控制項。也會顯示如何將處理常式附加至控制項的兩個自訂 OnButtonClick 事件。如需完整範例,請參閱在 Windows Form 中裝載簡單的 Windows Presentation Foundation 控制項範例

注意事項:

裝載的控制項在表單發生 Load 事件時尚未完全初始化。控制項的 Loaded 事件 (較晚發生) 則表示控制項已初始化。這個範例會將處理常式附加至控制項的 Loaded 事件,因為它需要取得數個屬性的初始值,而這些值在表單發生 Load 事件時尚未定義。

範例

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

請參閱

工作

逐步解說:在 Windows Form 中裝載 Windows Presentation Foundation 複合控制項

逐步解說:在 Windows Presentation Foundation 中裝載 Windows Form 控制項

在 Windows Form 中裝載簡單的 Windows Presentation Foundation 控制項範例

概念

逐步解說:在 Windows Form 中裝載 Windows Presentation Foundation 控制項

參考

ElementHost

WindowsFormsHost

其他資源

移轉和互通性 HOW TO 主題