少有人走的路

勇哥的工业自动化技术网站

WPF与Winform互操作:彼此窗体互相调用

WPF与Winform互操作[1]Winform调用WPF窗体


创建Winform应用程序项目。

打开VS2013,文件->新建->项目...,新建一个Windows窗体应用程序项目,项目名称为“Winform调用WPF窗体”。

为Form1添加一个按钮,用于打开WPF窗体。

image.png

image.png

创建待调用的WPF窗体。

为解决方案添加一个WPF应用程序项目,右键解决方案,添加->新建项目,创建一个WPF应用程序项目。

在WPF应用程序界面上拖放一个TextBox(测试键盘输入)和Button按钮(调用Winform窗体,下篇经验介绍)。

image.png

image.png

image.png

为项目添加WPF相关引用。

PresentationCore

PresentationFramework

System.Xaml

WindowsBase

WindowsFormsIntegration

以及待调用“WPF窗体”项目

image.png

书写按钮事件,调用WPF窗体。

如果不写ElementHost.EnableModelessKeyboardInterop(wpfwindow),调出WPF窗体的键盘输入不起作用。

另外,使用WindowInteropHelper类为WPF设置owner。

image.png

查看效果。

d009b3de9c82d158935f2b49820a19d8bd3e426c.gif


WPF调用Winform窗体


  1. 创建WPF应用程序项目。

    步骤为上篇经验 Winform调用WPF窗体 中步骤2所创建的项目,这里就不在详细描述了。

  2. 2

    创建一个Winform窗体应用程序。

    (为了避免项目循环引用,这里新建一个Winform程序项目)

    为解决方案添加一个Windows窗体应用程序项目,右键解决方案,添加->新建项目,创建一个Windows窗体应用程序项目(命名为“Winform窗体”)。

  3. 3

    为WPF应用程序项目添加Winform相关引用。

    System.Windows.Forms

    添加步骤2的项目引用:Winform窗体

image.png

书写按钮事件,调用Winform窗体。

这里,使用WindowInteropHelper类来协助WPF与Win32的互操作。

WindowWrapper根据WPF窗体的WindowInteropHelper实例的Handle获得IWin32Window对象,用于Winform窗体Show调用时作为Winform窗体的Owner。

需要说明的是:这里虽指定了Winform窗体的Owner,但是CenterParent是针对于Mdi窗体的,这里将不起作用。

image.png

查看效果

d009b3de9c82d158935f2b49820a19d8bd3e426c.gif


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.3

Copyright www.skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864