解決 VS2019 中.net core WPF 暫時無法使用 Designer 的臨時方法
- 解決 VS2019 中.net core WPF 暫時無法使用 Designer 的臨時方法
- 安裝 vs 2019 professional/enterprise版本
- 在vs的設置里,勾選.NET core下的"Use preview SDK"
- 使用vs自帶的模板,選擇其中的 .net core WPF 創建Project, 取名為"CoreHiWPF"
- 在剛創建的Solution中使用vs自帶的模板,選擇其中的.net framework WPF添加新的project,取名為"HiWPF"
- 更改 .net core WPF項目 CoreHiWPF 的Assembly Name,使得兩個項目一致
- 確保 .net core WPF項目 CoreHiWPF 是啟動項目
- 試用 XAML Designer
- 按需修改MainWindow.xaml和相應的.cs
以下方法來自於微軟github開源項目 **dotnet/samples**:
dotnet/samples - WPF Hello World sample with linked files,請放心使用。
此篇文章是上篇文章解決vs2019中暫時無法為.net core WinForms使用 Designer 的臨時方法的姊妹篇,但對WPF而言實現起來比WinForms簡單很多。核心思想還是借殼~
目前.net core下的WPF項目中的XAML可視化設計器(Designer)尚不可用,后續的Visual Studio 2019 Update才會支持該部分的功能。不過目前我們想在vs2019中使用 Designer,有一種臨時解決方法。
可以使用Visual Studio來處理鏈接文件(Link files)的功能,並將其XAML Designer用於Classic Framework (即.net Framework的WPF項目)。
具體的解決方法是在同一個 Solution下創建兩個項目:
- 用於設計WPF應用程序的.NET Framework應用程序.net Framework 項目)
- 用於運行WPF應用程序的.NET Core應用程序(.net core項目)
而兩個應用程序(.net core項目和相應.net Framework 項目)都將引用相同的文件,共享一個Assembly Name。
安裝 vs 2019 professional/enterprise版本
先安裝 vs 2019 professional/enterprise版本,安裝好.net core 3.0 SDK,此時試着創建一個.net core下的 WPF應用,

設置好相關項目名和存放路徑后,會彈出:

下一步驟,勾選.NET core下的"Use preview SDK"會解決這個問題。
當然也可使用命令行/Powershell來創建。
- 打開命令行/Powershell
- 使用cd命令,切換到自己平時存vs項目的路徑(比如我切換到
D:\Coding) - 輸入命令
dotnet new wpf -n "CoreHiWPF"

在vs的設置里,勾選.NET core下的"Use preview SDK"

設置完,重啟vs才能生效。
此時用vs打開剛才的Solution即可。
使用vs自帶的模板,選擇其中的 .net core WPF 創建Project, 取名為"CoreHiWPF"


在剛創建的Solution中使用vs自帶的模板,選擇其中的.net framework WPF添加新的project,取名為"HiWPF"


此時Solution中的文件目錄為:

更改 .net core WPF項目 CoreHiWPF 的Assembly Name,使得兩個項目一致
右鍵點擊 .net core WPF項目 CoreHiWPF,選擇最后的Properties, 然后將其Assembly Name 改為HiWPF.

接着右鍵該項目,選"Edit CoreHiWPF.csproj"。

按下圖加入如下相應代碼:

<ItemGroup>
<ApplicationDefinition Include="..\HiWPF\App.xaml" Link="App.xaml">
<Generator>MSBuild:Compile</Generator>
</ApplicationDefinition>
<Compile Include="..\HiWPF\App.xaml.cs" Link="App.xaml.cs" />
</ItemGroup>
<ItemGroup>
<Page Include="..\HiWPF\MainWindow.xaml" Link="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Compile Include="..\HiWPF\MainWindow.xaml.cs" Link="MainWindow.xaml.cs" />
</ItemGroup>
根據評論區 @lindexi 的建議改進了一下,確實更合理一些:

此時項目配置文件CoreHiWPF.csproj的內容為:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
<AssemblyName>HiWPF</AssemblyName>
</PropertyGroup>
<ItemGroup>
<Compile Update="..\HiWPF\**\*.xaml.cs">
<DependentUpon>%(Filename)</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Page Include="..\HiWPF\**\*.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
</Project>
然后重新編譯運行,再使用 XAML Designer 來修改,一切工作正常。
多謝 @lindexi 的改進建議~
確保 .net core WPF項目 CoreHiWPF 是啟動項目
如果.net core WPF項目 CoreHiWPF 已經高亮,就不用管了。否則,需要選中項目 CoreHiWPF ,右擊后選“Set As Start up project”.
試用 XAML Designer
此時關閉所有打開的文件,雙擊項目HiWPF中的MainWindow.xaml,就可以在XAML Designer中看到空白的WPF window了。

按需修改MainWindow.xaml和相應的.cs
接下來,我在MainWindow.xaml的Grid中加入了兩行,一行放的是一個含有文本可換行的Label,另一行是Exit按鈕。然后在Exit按鈕上加入了Click事件,在Window上加入了Loaded事件。

代碼改完之后,F5運行,最后的界面如下:

項目代碼已推到github,歡迎Fork和star.
傳送門: .netCore-WPF_Designer , 如果覺得自己配置起來麻煩,也可以 clone 下來自己體驗一把喔~
查看本人最近其他原創作品請移步 (想第一時刻閱讀本人最新文章請在博客園上關注我):
作者簡介:Bravo Yeung,計算機碩士,知乎干貨答主(獲81K 贊同, 38K 感謝, 235K 收藏)。曾在國內 Top3互聯網視頻直播公司工作過,后加入一家外企做軟件開發至今。
如需轉載,請加微信 iMath7 申請開白!
歡迎在留言區留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發,學習能力的提升上有新的認識,歡迎轉發分享給更多人。
歡迎各位讀者加入 .NET技術交流群,在公眾號后台回復“加群”或者“學習”即可。

文末彩蛋
微信后台回復“asp”,給你:一份全網最強的ASP.NET學習路線圖。
回復“cs”,給你:一整套 C# 和 WPF 學習資源!
回復“core”,給你:2019年dotConf大會上發布的.NET core 3.0學習視頻!
參考資料:
