WPF与Winform互操作:[1]Winform调用WPF窗体
介绍Winform程序如何调用WPF窗体。
工具/原料
- 以VS2013为例。
方法/步骤
-
创建Winform应用程序项目。
打开VS2013,文件->新建->项目...,新建一个Windows窗体应用程序项目,项目名称为“Winform调用WPF窗体”。
为Form1添加一个按钮,用于打开WPF窗体。
-
创建待调用的WPF窗体。
为解决方案添加一个WPF应用程序项目,右键解决方案,添加->新建项目,创建一个WPF应用程序项目。
在WPF应用程序界面上拖放一个TextBox(测试键盘输入)和Button按钮(调用Winform窗体,下篇经验介绍)。
-
为项目添加WPF相关引用。
PresentationCore
PresentationFramework
System.Xaml
WindowsBase
WindowsFormsIntegration
以及待调用“WPF窗体”项目 -
书写按钮事件,调用WPF窗体。
如果不写ElementHost.EnableModelessKeyboardInterop(wpfwindow),调出WPF窗体的键盘输入不起作用。
另外,使用WindowInteropHelper类为WPF设置owner。 -
查看效果。
END
WPF与Winform互操作:[2]WPF调用Winform窗体
介绍WPF应用程序如何调用Winform窗体。
工具/原料
- 以VS2013为例。
方法/步骤
- 1
创建WPF应用程序项目。
步骤为上篇经验 Winform调用WPF窗体 中步骤2所创建的项目,这里就不在详细描述了。 - 2
创建一个Winform窗体应用程序。
(为了避免项目循环引用,这里新建一个Winform程序项目)
为解决方案添加一个Windows窗体应用程序项目,右键解决方案,添加->新建项目,创建一个Windows窗体应用程序项目(命名为“Winform窗体”)。 - 3
为WPF应用程序项目添加Winform相关引用。
System.Windows.Forms
添加步骤2的项目引用:Winform窗体 - 4
书写按钮事件,调用Winform窗体。
这里,使用WindowInteropHelper类来协助WPF与Win32的互操作。
WindowWrapper根据WPF窗体的WindowInteropHelper实例的Handle获得IWin32Window对象,用于Winform窗体Show调用时作为Winform窗体的Owner。
需要说明的是:这里虽指定了Winform窗体的Owner,但是CenterParent是针对于Mdi窗体的,这里将不起作用。
- 5
查看效果
END