如题,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