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

 

 

 

 手動加上上述引用,叒試一把,完美!

 

以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM