[英]How to add WPF support to .NET 5 Winforms project
我正在將舊的 .NET Framework 4 WinForms 應用程序轉換為 .NET 5。在這種情況下,最簡單的方法是重新創建項目,該項目大部分都有效。 但是,我有一種方法可以從內存流中解碼 JPG 圖像:
// Look for JFIF header
MemoryStream memStream = new MemoryStream( rawData );
JpegBitmapDecoder decoder = new JpegBitmapDecoder( memStream,
BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default );
BitmapSource bmpSource = decoder.Frames[0];
Bitmap bitmap = new Bitmap( bmpSource.PixelWidth, bmpSource.PixelHeight,
PixelFormat.Format24bppRgb );
這失敗是因為 VS 2019 抱怨“使用 System.Windows.Media.Imaging”導致錯誤,並且 JpegBitmapDecoder 顯示為紅色波浪線。 如果我將鼠標懸停在 JpegBitmapDecoder 上,我將獲得“使用 System.Windows.Media.Imaging; from PresentationCode”的選項。
但是,選擇該選項會導致 VS 2019 卡在“執行建議操作”上,嘗試添加 using.
該項目針對 .NET 5,我添加了 Microsoft.Windows.Compatibility NuGet 包,那么我做錯了什么? 或者,如何訪問 JpegBitmapDecoder?
您寫道您使用的是 Visual Studio 2019(例如 16.7.6 版)。 但是,據我所知,.NET 5 項目僅在 Visual Studio 2019 預覽版(即 16.8.0 版預覽版)中受支持。
注意:.NET 5 項目僅在 Visual Studio 2019 的 16.8.0 版及更高版本中受支持(我才意識到“預覽”已成為發布狀態)。
當我嘗試在 Visual Studio 2019 預覽版中重現您的問題時,我遇到了一個稍微不同的問題:當我選擇“使用 System.Windows.Media.Imaging;來自 PresentationCode”菜單項時,會出現一個進度對話框:
這個對話似乎永遠持續下去。 Visual Studio 似乎從未真正完成該操作。
因此,該功能的那部分似乎已損壞。 但是,幸運的是,您可以手動執行 Visual Studio 應該為您完成的相同操作。 只需選擇項目,然后從“項目”菜單中選擇“編輯項目文件” ,並將<UseWPF>true</UseWPF>
到主項目<PropertyGroup>
元素。
完成后,項目文件可能如下所示:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
此時,項目“依賴項” WPF 庫中“框架”項下的條目“Microsoft.WindowsDesktop.App.WindowsForms”應更改為“Microsoft.WindowsDesktop.App”,並且將包括您使用的 Winforms 和 WPF 庫需要。
您也可以采用另一種方式,將 Winforms 支持添加到現有的 WPF 項目,只需添加<UseWindowsForms/>
元素即可。
當然,這一切都引出了一個問題,為什么您不只使用 GDI+ 圖像處理類型。 Winforms 可以像 WPF 一樣加載 JPEG 文件,所以不清楚為什么要依賴 WPF。 但也有其他混合搭配的原因。 無論您想在 .NET 5 項目中結合 Winforms 和 WPF 的原因是什么,以上都可以做到。
我找到了答案。 顯然,我必須在項目文件中添加一個 UseWPF 項,因為 PresentationCore 確實是一個 WPF 庫。 這樣做解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.