1. 程式人生 > 程式設計 >VisualStudio2019中為.NET Core WinForm App啟用窗體設計器

VisualStudio2019中為.NET Core WinForm App啟用窗體設計器

當我們在使用 Visual Studio 2019 非預覽版本開發 Windows Forms App (.NET Core) 應用程式時是不能使用窗體設計器的。即使在窗體檔案上右擊選擇“顯示設計器”選單,仍舊只能看到程式碼,無法開啟窗體設計器。

根據微軟開發者部落格的描述,我們可以使用 Visual Studio 2019 預覽通道,將 Visual Studio 2019 更新至 16.6 來啟用設計器(參見:Updates on .NET Core Windows Forms designer)。

在不啟用預覽通道的情況下,我們仍然可以通過更改專案檔案來讓專案支援窗體設計器。

當我們新建一個 .NET Core Windows Forms 程式時,我們的專案檔案(*.csproj)通常包含以下內容:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
 <PropertyGroup>
 <OutputType>WinExe</OutputType>
 <TargetFramework>netcoreapp3.1</TargetFramework>
 <UseWindowsForms>true</UseWindowsForms>
 </PropertyGroup>
</Project>

TargetFramework標籤標識我們程式的目標框架是.netcoreapp3.1

。如果我們的專案同時可以支援 .NET Framework 那麼就可以在 Visual Studio 中使用設計器,可以使用TargetFrameworks標籤來讓專案支援多個目標框架:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
 <PropertyGroup>
 <OutputType>WinExe</OutputType>
 <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
 <UseWindowsForms>true</UseWindowsForms>
 </PropertyGroup>
</Project>

儲存更改後,Visual Studio 可能會提示重新載入。確認重新載入,窗體設計器就可以使用了:

VisualStudio2019中為.NET Core WinForm App啟用窗體設計器

通過為專案增加 .NET Framework 目標框架來啟用設計器

做完這一步,我們的程式碼會無法通過編譯。這是因為專案中使用了一個新的 API :SetHighDpiMode,但是 .NET Framework 4.7.2 並不支援。可以通過條件編譯來限定對SetHighDpiMode的呼叫僅在 .NET Core APP 下生效。當目標框架是 .NET Core 時,生成系統可以識別NETCOREAPP處理器符號(感謝 @麥殼餅 的提示)。對 Program.cs 檔案中 Main 方法的程式碼稍作修改即可編譯通過:

 /// <summary>
 /// The main entry point for the application.
 /// </summary>
 [STAThread]
 static void Main()
 {
#if NETCOREAPP
  Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new FrmMain());
 }

點選“除錯”按鈕的下拉項對目標框架進行切換:

VisualStudio2019中為.NET Core WinForm App啟用窗體設計器

切換除錯專案的目標框架

程式執行起來後,效果令人滿意:

VisualStudio2019中為.NET Core WinForm App啟用窗體設計器

.NET Core Windows Forms 執行效果

到此這篇關於VisualStudio2019中為.NET Core WinForm App啟用窗體設計器的文章就介紹到這了,更多相關.NET Core WinForm App啟用窗體設計器內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!