当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

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

Jorge2年前 (2022-05-09)C#/.net框架2368

 

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


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:https://blog.7dot.cn/?id=108

标签: .NET.NET框架
分享给朋友:

“WPF与Winform互操作:彼此窗体互相调用” 的相关文章

windows下c#程序提高实时性

windows下c#程序提高实时性

引言:我们手里的运控软件对实时性有了新要求。因为同设备上运行的其它视觉软件对cpu时间有变态的占用,压缩了运控软件的cpu占用时间。我们知道如果视觉软件卡一下,最多是处理时间长一点,但是运控软件卡一下,那就意味着撞机的问题,这个要严重得多。这个问题会持续把研究结果更新到本贴子。(一)提升线程和进程的...

C#的变迁史 - C# 4.0 之线程安全集合篇

C#的变迁史 - C# 4.0 之线程安全集合篇

作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了。  而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们,微软为我们带来了强大的并行集合:System.Collections.Concurrent里面的各...

C#中使用RegisterWindowMessage进行进程之间进行通讯

C#中使用RegisterWindowMessage进行进程之间进行通讯

注:大家都知道在window里,进程之间通讯可以用消息通讯。但是有个较冷门的知识就是RegisterWindowMessage。一般的sendmessage和postmessage是需要在窗体程序间进行通讯,你得知道对方窗口的句柄。这个句柄每次启动程序时是系统分配的,每次不一样。有了这个Regist...

索引器(C# 编程指南)

索引器(C# 编程指南)

 索引器允许类或结构的实例就像数组一样进行索引。 无需显式指定类型或实例成员,即可设置或检索索引值。 索引器类似于属性,不同之处在于它们的访问器需要使用参数。以下示例定义了一个泛型类,其中包含用于赋值和检索值的简单 get 和 set 访问器方法。&...

细说进程、应用程序域与上下文之间的关系(二)—— 应用程序域

细说进程、应用程序域与上下文之间的关系(二)—— 应用程序域

目录一、进程的概念与作用二、应用程序域三、深入了解.NET上下文四、进程应用程序域与线程的关系 二、应用程序域使用.NET建立的可执行程序 *.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中。应用程序域是.NET引入的一个新概念,它比进程所占用的资源要少,...

C# await、UI和死锁的问题

C# await、UI和死锁的问题

开发人员对Asnync 异步机制的兴趣程度很高。当然,任何新技术都必然会出现一些小问题。我现在多次看到的一个问题是开发人员通过阻止他们的 UI 线程意外地使他们的应用程序死锁,所以我认为花一些时间来探索这种情况的常见原因以及如何避免这种困境是值得的。就其核心而言,新的异步语言功能旨在恢复开发人员编写...

发表评论

访客

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