WPF窗体中嵌入/使用WinForm类/控件(基于.NET Core)
如题,WPF中嵌入WinForm的做法,网络上已经很多示例,都是基于.NET XXX版的。
今天King様在尝试WPF(基于.NET Core 3.1)中加入Windows.Forms.ColorDialog的时候,走了点弯路。
需求:
在WPF中,实现调用颜色选择框的效果。
尝试1:
参考网上其他人的做法(基于.NET XXX),加入了以下引用。
发现编译不通过,VS提示一堆红线,代码很不舒服的样子。

同时,WPF用的System.Windows.XXX命名空间下的控件,而WinForm用的是System.Windows.Forms.XXX下的控件。
很多控件名冲突了,要指定具体使用的命名空间。
于是乎,下了一个结论:需求嵌入的Windows.Forms.ColorDialog控件,单独放在一个pj里可好?
尝试2:
新建一个Winform项目(基于.Net 4.7.2),默认Form上,加一个ColorDialog,Form公开一个Color出去,等着wpf调用的时候用。
然后,wpf这边,加上WindowsFormsIntegration.dll和System.Windows.Form.dll引用,
XAML里声明命名空间:
xmlns:wfh="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:cdf ="clr-namespace:YMSL.CS4.FMS.FA.ColorDialog;assembly=ColorDialog"
再指定WindowsFormsHost
<wfh:WindowsFormsHost Grid.Row="0" Grid.Column="0" Name="WinFormHost1" Margin="0,0,0,0" >
<cdf:ColorChooserForm TopLevel="False" x:Name="colorChooserForm" Margin="0,0,0,0" FormClosed="colorChooserForm_FormClosed"></cdf:ColorChooserForm>
</wfh:WindowsFormsHost >
cs文件里,colorChooserForm_FormClosed实现,取得Winform公开返回出来的Color。
结果,还是有尝试1相同问题。
于是乎,又下了一个结论:难道是框架不一致?Winform项目,.NET Core 3.1支持吗?
尝试3:
上述Winform项目,改成基于基于.NET Core 3.1。再试一把,成了。
项目构成+核心代码:

回头一望,既然,只是用Windows.Forms.ColorDialog,那duck不必摆在画面上(上图位置3),还要设置可见不可见之类的。
那就不要WindowsFormsHost吧,全写在后台代码里(上图位置4)。
又试一把,成了。
回头再望,既然WinForm那边的控件不要,那上述Winform项目也用不上了吧。
丢掉丢掉,全部丢掉。
双试一把,error如下:

于是乎,双下了一个结论:不使用Winform项目的控件,那Winform项目提供的功能就是这两个程序集了。
System.Windows.Forms;
System.Drawing.SolidBrush;
那尝试1中的程序集怎么不行呢?
尝试4:
去(上图位置4)的定义里看一看!结果呼之欲出,.net core平台的项目,用.net XXX的DLL,看来是不行啊。


手动加上上述引用,叒试一把,完美!

以上。
WPF窗体中嵌入/使用WinForm类/控件(基于.NET Core)的更多相关文章
- 如何在WPF程序中使用ArcGIS Engine的控件
原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...
- [工作札记]03: 微软Winform窗体中ListView、DataGridView等控件的Bug,会导致程序编译失败,影响范围:到最新的.net4.7.2都有
工作中,我们发现了微软.net WinForm的一个Bug,会导致窗体设计器自动生成的代码失效,这个Bug从.net4.5到最新的.net4.7.2都存在,一直没有解决.最初是我在教学工作中发现的,后 ...
- 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发
原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...
- winform基础控件总结
转自:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 基础 - 常用控件 C# WinForm开发系列 - CheckBox/B ...
- 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox
pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...
- WPF加载Winform窗体时 报错:子控件不能为顶级窗体
一.wpf项目中引用WindowsFormsIntegration和System.Windows.Forms 二.Form1.Designer.cs 的 partial class Form1 设置为 ...
- 在DevExpress程序中使用Winform分页控件直接录入数据并保存
一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...
- WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? ...
- 在WPF窗体中重绘
原文:在WPF窗体中重绘 写这篇主要是为了验证任何元素自身都具备绘图功能. 在默认Window中重写OnRender方法 protected override void OnRender(Draw ...
随机推荐
- 例题3-3 回文词(Palindromes, UVa401)
输入一个字符串,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓 回文串,就是反转以后和原串相同,如abba和madam.所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE.注意, ...
- 第十八章 HTTPS介绍及实战演练
一.HTTPS介绍 1.概述 为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数 ...
- CentOS 8 Yum安装ansible
ansible的安装 直接yum安装ansible会报错,需要先安装epel源. ansible的安装来源于epel仓库,因此在安装前需确保安装了正确的epel源. yum install -y ep ...
- uvalive6468,51cthink1419 Strange Antennas (离散化)
题意: 在一个 n x n 的平面上,给定 m 个等腰直角三角形(各点均为整数),问该平面上被三角形覆盖奇数次的点有多少个. 思路: 由于 n 较大,不能模拟解决,故使用离散化思想. 考虑每一行有多少 ...
- npm install各种命令模式
npm install 几种命令模式: npm install moduleName 安装模块到项目目录下 npm install -g moduleName npm install -g 将模块安装 ...
- viewpage启动页
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com ...
- 跟我一起学.NetCore之MediatR好像有点火
前言 随着微服务的流行,而DDD(领域驱动设计)也光速般兴起,CRQS(Command Query Responsibility Seperation--命令查询职责分离).领域事件名词是不是经常在耳 ...
- Easyswoole的WaitGroup和Csp组件的分析和使用
Easyswoole的WaitGroup和Csp组件的分析和使用 easyswoole可真是个好名字,只是提供了恰到好处的封装,即使是源码也保持了这样的风格.这种风格不论好坏可能都需要各位适应下,哈哈 ...
- 如何修改hosts并保存
Hosts文件用于本地调试,或手动设置一个域名应该被解析到哪个IP地址,在修改时会发现需要管理员权限才能修改保存,这个时候我们可以这样做 找到Hosts文件,将Hosts文件复制到桌面.(Window ...
- CF1017G——The Tree
传送门:QAQQAQ 题意:给你一棵树,有三种操作,设所有点本来未感染 1:感染节点i,若i被二次感染,则感染i的儿子(若儿子也被感染,则感染孙子,直到到底或者感染了健康点) 2:使i子树全部健康 3 ...