如題,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,看來是不行啊,


手動加上上述參考,叒試一把,完美!

以上,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/228266.html
標籤:WPF
上一篇:C#中的WinForm問題——如何設定表單的大小為超過螢屏顯示的最大尺寸?
下一篇:WPF實作等待界面效果
