WPF 通过 Windows Template Studio 快速搭建项目框架和上手项目
本文对新手友好。在咱开始一个新项目的时候,可以利用 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 文件夹
WPF 通过 Windows Template Studio 快速搭建项目框架和上手项目的更多相关文章
- 快速搭建SSM框架环境开发项目【配置】
maven在线仓库https://mvnrepository.com/ maven构建项目 pom.xml <project xmlns="http://maven.apache.or ...
- Announcing Windows Template Studio in UWP
今天,我们很高兴地宣布您的文件→新的通用Windows平台应用程序在Visual Studio - Windows模板工作室中的下一个演变.Windows Template Studio在开发人员调查 ...
- Windows服务的快速搭建与调试(C#图解)
Windows服务的快速搭建与调试(C#图解) 目录 一.什么是Windows 服务? 二.创建Windows 服务与安装/卸载批处理. 三.调试Windows 服务. 正文 一.什么是Windo ...
- windows 7 下快速搭建php环境(windows7+IIS7+php+mysql)
原文:windows 7 下快速搭建php环境(windows7+IIS7+php+mysql) 1).采用理由: 优点:最大化的桌面图形化操作系统,可维护性优秀.基于IIS v6.0/v7.0(20 ...
- 脚手架快速搭建springMVC框架项目
apid-framework脚手架快速搭建springMVC框架项目 rapid-framework介绍: 一个类似ruby on rails的java web快速开发脚手架,本着不重复发明轮 ...
- windows下如何快速搭建web.py开发框架
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方 ...
- 在windows下如何快速搭建web.py开发框架
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方 ...
- 快速搭建一个基于react的项目
最近在学习react,快速搭建一个基于react的项目 1.创建一个放项目文件夹,用编辑器打开 2.打开集成终端输入命令: npm install -g create-react-app 3. cre ...
- MyEclipse8.5快速搭建SSH框架
来源于:http://jingyan.baidu.com/article/a378c960a78125b3282830cc.html MyEclipse8.5快速搭建SSH框架 使用版本: Strut ...
- 快速搭建ssm框架
快速搭建SSM框架 因为最近有很多朋友问我自己的项目搭建的不够完善,并且经常出现一些小问题,那么今天我又整理了一下文档教大家如何快速搭建SSM框架我是用 eclipse搭建的,如果想用idear的话我 ...
随机推荐
- 数据好合: Argilla 和 Hugging Face Spaces 携手赋能社区合力构建更好的数据集
最近,Argilla 和 Hugging Face 共同 推出 了 Data is Better Together 计划,旨在凝聚社区力量协力构建一个对提示进行排名的偏好数据集.仅用几天,我们就吸引了 ...
- SwiftUI 笔记
TextField 监听 lost focus 之前有一个初始化方法,传入一个 onEditingChanged closure,但这个方法废弃了,文档中也说了 alternative:使用 Focu ...
- VIVADO原理图中的概念
VIVADO原理图的基本作用 * 查看不同层次下的逻辑关系或者网表关系 * 检查逻辑设计是否可以通过数字电路实现 * 观察重要的信号的走向,分析可能的优化方向 VIVADO原理图几个基本概念 (1) ...
- KingbaseESV8R6使用pageinspect插件观察空值
前言 在KingbaseES元组头数据中,有一个t_bits数组,用于存储空值位图.当元组中没有null值的时候,t_bits是空的,当元组有null值的列时,t_bits使用一个bit来表示列是否为 ...
- 白话分解入门操作系统到 Java
一.完成一个任务需要什么? 时间 + 资源 + 处理能力 时间就是时间. 资源就是资源. 处理能力就是能够利用时间和资源完成任务的主体. 二.关于操作系统 处理能力就是cpu. 资源就是存储. 时间就 ...
- yml和properties打印SQL日志信息
1.配置文件里面配置 第一种是properties类型如下 logging.level.com.datayes.mdi.dao.rdb.mommp.**=debug其中 com.datayes.mdi ...
- USACO 4.2
目录 洛谷 2740 草地排水 代码(网络最大流) 洛谷 2751 工序安排 分析 代码 洛谷 1894 完美的牛栏 代码(二分图最大匹配) 草地排水洛谷传送门,草地排水USACO传送门 工序安排洛谷 ...
- #线性基#LOJ 114 k大异或和
题目 分析 建出线性基后,但是要求最小所以要重建线性基让大的尽量小, 然后第k小就是拼凑 代码 #include <cstdio> #include <cctype> #inc ...
- SkipList和java中ConcurrentSkipListMap的实现
目录 简介 SkipList ConcurrentSkipListMap SkipList的实现 concurrent的实现 总结 SkipList和java中ConcurrentSkipListMa ...
- 响应式系统reactive system初探
目录 初识响应式系统 什么是响应式系统 响应式系统的四大特点 及时响应性(Responsive) 恢复性(Resilient) 有弹性(Elastic) 消息驱动(Message Driven) 总结 ...