2020-11-19

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里声明命名空间:

 

再指定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,看来是不行啊。

 

 

 

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

 

以上。

 

原文转载:http://www.shaoqun.com/a/490567.html

折扣网站:https://www.ikjzd.com/w/74

mil:https://www.ikjzd.com/w/1285

promoted:https://www.ikjzd.com/w/971


如题,WPF中嵌入WinForm的做法,网络上已经很多示例,都是基于.NETXXX版的。今天King様在尝试WPF(基于.NETCore3.1)中加入Windows.Forms.ColorDialog的时候,走了点弯路。需求:在WPF中,实现调用颜色选择框的效果。尝试1:参考网上其他人的做法(基于.NETXXX),加入了以下引用。发现编译不通过,VS提示一堆红线,代码很不舒服的样子。同时,WPF用
c-tick认证:c-tick认证
虚拟信用卡:虚拟信用卡
深圳春节旅游好去处?深圳2020年春节哪里玩?:深圳春节旅游好去处?深圳2020年春节哪里玩?
拙政园荷花节开幕啦 7月中旬为赏荷最佳时节:拙政园荷花节开幕啦 7月中旬为赏荷最佳时节
大理冬天下雪吗?冷不冷?:大理冬天下雪吗?冷不冷?

No comments:

Post a Comment