本文對新手友好。在咱開始一個新項目的時候,可以利用 Windows Template Studio 快速搭建整個項目的框架。搭建出來的框架比較現代化,適合想要快速開發一個項目的大佬使用,也適合小白入門學習如何開發應用
通過 Windows Template Studio 工具,可以在 VisualStudio 提供的可視化選項里面,按照步驟,逐步選擇自己想要的功能,點擊完成即可自動創建一個包含所有基礎功能和框架的解決方案。接下來要做的是在此搭建好的框架上進行邏輯更改,加上自己的業務功能
下面讓我一步步告訴你如何使用 Windows Template Studio 工具
在開始之前,需要給 VisualStudio 安裝上 Windows Template Studio 插件,以下是安裝插件的步驟
點擊工具欄,點擊管理擴展
點擊聯機選項,搜尋 Windows Template Studio 即可找到插件
點擊下載即可自動下載安裝
安裝完成之后,記得重啟 VisualStudio 哦。打開 VisualStudio 在首頁新建項目可以看到添加的模版,在 Windows Template Studio 工具不僅包含了 WPF 項目的,還包含了 UWP 等項目的,本文只使用 WPF 作為例子,對於其他的項目,大概是差不多
點擊創建,然后輸入項目名和選擇項目的文件夾
點擊創建,此時將會給一個選項卡用來逐步選擇。首次打開需要稍等一下
開始的時候是選擇項目的大框架,也就是項目的組織方式是什么。如我選擇了 MenuBar 類型的項目
選擇之后點擊下一步,選擇應用需要包含的頁面,如空白頁面和設置面等
頁面是可以重復多次選擇的,也可以做右側進行刪除
點擊下一步,開始選擇支持的功能,如加上 MSIX 打包功能
點擊下一步,選擇應用需要包含的服務,如賬號登錄功能
點擊下一步,給應用程序加上單元測試,有多個不同的單元測試可以選擇
點擊創建即可開始創建項目
等待一下即可創建出一個解決方案
啥都不要做,按下 F5 即可進行構建和運行
以上就是我運行的 demo 應用
如果按下 F5 沒有構建成功,那就是 VisualStudio 沒有安裝完全。如果可以構建成功,但是運行失敗,如有選擇需要登錄,那需要加上應用的標識符,但實際上沒有加入,將會在運行的時候提示 Microsoft.Identity.Client.MsalClientException:“Error: ClientId is not a GUID. ”
如下圖
解決方法是在 appsettings.json 文件里面加上 identityClientId 的值,如下面代碼
{
"AppConfig":
{
"userFileName": "User.json",
"identityClientId": "CB9FC3AB-C5CC-42FB-881B-50EFCE0B1BE4",
"identityCacheFileName": ".msalcache.dat",
"identityCacheDirectoryName": "MSAL_CACHE",
"configurationsFolder": "WheburfearnofeKellehere\\Configurations",
"appPropertiesFileName": "AppProperties.json",
"privacyStatement": "https://YourPrivacyUrlGoesHere/"
}
}
接下來讓咱了解一下這個通過 Windows Template Studio 創建的項目的大體框架
先打開 App.xaml.cs 文件,這個文件就是咱的 WPF 應用的入口
大概的邏輯和默認的 WPF 應用差不多,但是實際上這個自動創建的項目用上了現代化的 IOC 容器的方式。整套邏輯都保持現代化的 dotnet 寫法,此寫法和 ASP.NET Core 的寫法差不多,都是一脈的方法。如啟動的時候先做的服務配置
可以看到在這里面實現了大量的服務的注入,包括 ViewModel 以及其他用到的邏輯
這個 WPF 應用將在 ApplicationHostService 進行管理,包括窗口的啟動和切換頁面
以上的 ApplicationHostService 是一個繼承 IHostedService 的類型,讀到這里就要求大家對 dotnet 的默認框架有所了解
如果不想去閱讀 dotnet 的默認框架的設計,那只需要知道,在應用啟動之后,將會調用 StartAsync 方法即可
以上代碼是進行初始化,以及初始化登錄模塊
而是創建窗口的邏輯是放在 HandleActivationAsync 方法里面
在判斷當前還沒有啟動任何窗口的時候,將會啟動 MainWindow 作為主創建,但是啟動窗口的方法是通過 MainViewModel 進行的
如下面代碼
private async Task HandleActivationAsync()
{
var activationHandler = _activationHandlers.FirstOrDefault(h => h.CanHandle());
if (activationHandler != null)
{
await activationHandler.HandleAsync();
}
await Task.CompletedTask;
if (App.Current.Windows.OfType<ishellwindow>().Count() == 0)
{
// Default activation that navigates to the apps default page
_shellWindow = _serviceProvider.GetService(typeof(IShellWindow)) as IShellWindow;
_navigationService.Initialize(_shellWindow.GetNavigationFrame());
_rightPaneService.Initialize(_shellWindow.GetRightPaneFrame(), _shellWindow.GetSplitView());
_shellWindow.ShowWindow();
_navigationService.NavigateTo(typeof(MainViewModel).FullName);
await Task.CompletedTask;
}
}
通過以上即可看到創建出來的項目 MVVM 部分做的不錯,來看一下項目的大框架,各個文件按照 MVVM 的方法放在不同的文件夾
我很熟悉 MVVM 因此一看就知道各個文件是做什么的,通過此工具創建也可以讓新手了解如何編寫 MVVM 代碼
回答上面代碼為什么通過切換到 MainViewModel 即可自動到主頁面。是因為在 PageService 里面實現了注冊,關聯了 MainViewModel 和 MainPage 界面
通過 Windows Template Studio 工具搭建的界面,可以在很快的速度,搭建出來一個能用的框架
可以通過如下方式獲取本文的源代碼,先創建一個空文件夾,接着使用命令行 cd 命令進入此空文件夾,在命令行里面輸入以下代碼,即可獲取到本文的代碼
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 71156c6e8818fbefecac4ee2d31724df1bbcfe45
以上使用的是 gitee 的源,如果 gitee 不能訪問,請替換為 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
獲取代碼之后,進入 WheburfearnofeKellehere 文件夾