簡體   English   中英

如何將 WPF 支持添加到 .NET 5 Winforms 項目

[英]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”菜單項時,會出現一個進度對話框:

“使用 System.Windows.Media.Imaging;(來自 PresentationCore)”進度對話框

這個對話似乎永遠持續下去。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM