您的位置:首页 > 其它

在WinForm应用程序中嵌入WPF控件(转)

2012-07-04 13:23 253 查看
我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类。而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是为了在WinForm应用程序中嵌入WPF元素而定义的。它继承自System.Windows.Forms.Control,是一个WinForm控件,但它知道如何显示WPF内容。

接下来演示如何使用ElementHost来显示一个WPF控件——Button,并与WinForm中Button的显示作个简单的对比(xp环境)。

1. 创建一个标准的WinForm工程,从工具栏中找到“WPF Interoperability”项目,选择其中的ElementHost,将其拖拽到Form中,如图1所示:



图 1 拖拽ElementHost到Form中

2. 简单的调整一下ElementHost的大小,因为默认情况下,WPF控件会占据所有给予ElementHost的空间。此外,我们查看一下工程的References,可以看到,拖拽ElementHost后,会自动添加必要的WPF程序集(PresentationFramework、PresentationCore、WindowBase等)。

3. 接下来我们拖拽一个WinForm Button到Form中,修改Button的内容为“Button in Winform”,如图2所示:



图 2 添加Winform Button

4. WPF控件只能在后台代码中添加到ElementHost中,我们在窗体的构造函数中创建WPF控件,如下面的代码片段所示:

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

// Create a WPF Button

System.Windows.Controls.Button btn = new System.Windows.Controls.Button();

btn.Content = "Button in WPF";

// Add it to ElementHost

elementHost.Child = btn;

}

}

ElementHost的Child属性为UIElement类型,因此,它可以被设置成任何UIElement对象。

5. 按下F5,运行Winform应用程序,WPF的Button控件和Winform的Button控件显示如图3所示。可以看出,两个Button的默认字体明显不同。



图 3 两个Button的显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: