前言
隨着.net core 3.0 的發布,WPF 也可以在 core 平台上使用了。當前的 WPF 不支持跨平台,僅能夠在 Windows 平台上使用。如果想體驗 WPF 跨平台開發,可以訪問開源項目Avalonia。不過當前的 WPF 已經可以滿足我們的大部分使用需求了,畢竟使用 core 開發起來很爽。這意味着不必在用戶的機器上安裝 .net framework 依賴環境,以獨立的方式發布的軟件,復制到任意一台 Windows 上就可以直接運行。
啟程
當我們帶着激動的心情開始新的 WPF 征程時,發現文件夾瀏覽器對話框(FolderBrowserDialog)無法使用了,就算我們輸入引用using System.Windows.Forms;
也發現編輯器報錯:
嘗試像以往一樣向引用中添加程序集時,發現引用管理器中已經沒有了程序集這個選項了。
在網上瀏覽半天,也沒有發現什么有用的信息。不過在 dotnet/wpf 的一個issues中提及了這個問題。在該討論中說可以使用 Windows forms 中的文件夾對話框,卻沒有說怎么使用。而這正是我們遇到的問題。
解決
我們不妨換一個思路來看待問題,查看源項目文件是怎樣組成的。打開 wpf 項目文件,發現里面極其簡潔。
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
這也是 core 3.0 的一大改變,所有的默認引用將不再顯示出現在項目文件中。而我們查看 forms 項目文件時也是如此,唯一的區別就是開關UseWPF
改為了<UseWindowsForms>true</UseWindowsForms>
。嘗試將該開關寫入 wpf 項目文件中后,發現編輯器報錯取消了。並且文件夾對話框也可以使用了。這意味 wpf 和 forms 依舊可以共存。而使用者完全可以從forms項目改變開關就可以轉為wpf項目。
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void OpenFolderDialog()
{
var fbd = new FolderBrowserDialog();
fbd.ShowDialog();
}
}
總結
本文章雖然極其簡單,但在現今 core 3.0 的中文資料很少的情況下,相信對於新手還是有一定幫助的。故此記錄,希望可以幫助到您。