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

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

 

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

 

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

 

 

1 拖拽ElementHostForm

 

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

 

3.  接下来我们拖拽一个WinForm ButtonForm中,修改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;

        }

    }

 

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

 

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

 

 

3 两个Button的显示

posted @   长白山  阅读(897)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示