如题,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)的更多相关文章

  1. 如何在WPF程序中使用ArcGIS Engine的控件

    原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...

  2. [工作札记]03: 微软Winform窗体中ListView、DataGridView等控件的Bug,会导致程序编译失败,影响范围:到最新的.net4.7.2都有

    工作中,我们发现了微软.net WinForm的一个Bug,会导致窗体设计器自动生成的代码失效,这个Bug从.net4.5到最新的.net4.7.2都存在,一直没有解决.最初是我在教学工作中发现的,后 ...

  3. 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发

    原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...

  4. winform基础控件总结

    转自:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 基础 - 常用控件 C# WinForm开发系列 - CheckBox/B ...

  5. 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox

    pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...

  6. WPF加载Winform窗体时 报错:子控件不能为顶级窗体

    一.wpf项目中引用WindowsFormsIntegration和System.Windows.Forms 二.Form1.Designer.cs 的 partial class Form1 设置为 ...

  7. 在DevExpress程序中使用Winform分页控件直接录入数据并保存

    一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...

  8. WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性

    原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? ...

  9. 在WPF窗体中重绘

    原文:在WPF窗体中重绘   写这篇主要是为了验证任何元素自身都具备绘图功能. 在默认Window中重写OnRender方法 protected override void OnRender(Draw ...

随机推荐

  1. day34 Pyhton 网络编程

    一今日内容 # 函数 # 面向对象 # 进阶 # 网络编程 4 # 并发编程 6-7 # 概念 # 网络基础 # 局域网的概念 # 交换机和路由器的工作流程 # ip地址 # mac地址 # 子网掩码 ...

  2. 正式班D9

    2020.10.16星期五 正式班D9 一.vmware workstation的使用 虚拟机管理软件 定义 虚拟机(Virtual Machine)软件是一套特殊的软件,它可以作为操作系统独立运行, ...

  3. centos8环境安装配置rsync

    一,查看本地centos的版本: [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ...

  4. centos8平台使用ip命令代替ifconfig管理网络

    一,为什么建议使用ip命令代替ifconfig? 1,ifconfig所属的net-tools包已经不再被维护了 虽然可以用,但会发生看不到部分ip等情况, [root@centos8 liuhong ...

  5. Pytest之使用断言指定异常

    官网的翻译是使用断言抛出指定异常,当我觉得他这里更应该指的是 Pytest 断言错误类型# 使用raise在测试方法中指定异常的类型,这点和java还是蛮像的呢,具体示例如下: import pyte ...

  6. JavaScript实现异步的4中方法

    一:背景简介 Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须 ...

  7. c# 误区系列(二)

    前言 继续整理误区系列,可能会对刚入门的新手有些帮助,然后希望有错误的地方可以指出. 正文 关于泛型方法的确定 class Person<T> { public void add(T a) ...

  8. 装java开发环境 报client/jvm.dll找不到

    jdk安装成功,明明有jvm.dll就是找不到,导致eclipse打不开.此时eclipse为64位,jdk为32位:查了好多方法,不起作用.最后将jdk换位64位问题解决. 所以,一般64位的系统建 ...

  9. oracle sql developer 启动java.exe设置错误

    1.找到oracle安装目录下的jdk,如:E:\app\Administrator\product\11.2.0\dbhome_1\jdk 2.找到oracle安装目录下的developer路径:E ...

  10. Java8新特性探索之Lambda表达式

    为什么引入Lambda表达式? Lambda 表达式产生函数,而不是类. 在 JVM(Java Virtual Machine,Java 虚拟机)上,一切都是一个类,因此在幕后执行各种操作使 lamb ...