问:为什么不使用那个 .NET 6,WinUI 3 的项目模板?
答:它尚未成熟,无法使用。
这篇文章教大家在 Visual Studio 2022 上新建 Uno Platform 项目。Uno Platform 是一个跨平台的 WinUI/UWP 实现。
Uno Platform 的创建是因为 nventive 公司使用 Xamarin.Forms 时因为 Xamarin.Forms 是对各平台原生 UI 工具包的封装,会导致各种各样的 UI 不一致,功能缺失,性能损失,该公司忍无可忍,创造了自绘的 Uno Platform。(注:微软的 MAUI 框架已加入了自绘支持 (Maui.Graphics.Controls))目前,Uno Platform 提供了 Fluent UI、Material Design、Cupertino 三种主题。
1.安装 VS2022 保证选中必要项:
之后点击右下角的关闭按钮并完成安装。
在安装中,系统可能会弹出一个 PowerShell 窗口,不用管,它会自行关闭。
在安装中,系统可能会提示你是否允许一个程序访问网络,选择允许访问。
2.安装适用于 VS2022 的 Uno Platform 扩展。
扩展在 Visual Studio 里可能下载不了。可以到这里去下:
适用于VS2022的UnoPlatform扩展-C#文档类资源-CSDN下载
当扩展安装完成后,打开 VS2022,创建新项目,选择“Multi-Platform App (Uno Platform | .NET 6 | UWP)”,点击下一步。
之后配置新项目,点击“创建”。注意项目的名称要符合变量命名规则。
点击菜单上的“工具(T)">"NuGet 包管理器(N)”>"管理解决方案的 NuGet 程序包“,打开窗口,检查是否把 NuGet 包全部更新到最新版本。
创建之后,务必确保所有 NuGet 包都更新到最新版本!
3.当项目打开之后,选择如下配置,点击“►”按钮进行调试。
首次开发时,Windows 可能会弹出一个设置窗口,打开“开发人员模式”并关闭设置窗口。
用这个模板,每次创建新的解决方案,用这个解决方案的各个配置中的任何一个,第一次用该配置进行生成时,可能会等很长时间,这是因为 VS 要先下载 Uno Platform 相关的包,需要保持网络开启。
并且,每一个新建的解决方案,对于每一个不同的配置,首次用该配置构建项目时,都要保持网络良好,这是因为第一次构建时 VS 要先下载相关的包,不然会编译或运行出错。
耐心的等待项目生成。
软件在启动时会显示模板默认的 Uno Platform 的图标,启动时显示软件图标是 WinUI 的特性,你可以用自己的图标换掉。
4.以 WASM 格式生成来把软件嵌入到网页中。
更改配置为:
,点击“► IIS Express”按钮进行调试。
之后,如果是第一次,系统会弹几个窗口,问是否要安装本地调试用的 localhost SSL 证书,一律点“是”“确定”“允许”.
首次生成这类项目时,VS 会先自动下载所需的 “Microsoft.AspNet.Core”等一系列包,需要保持网络开启。
之后,软件会出现在网页中。
5.写代码。
代码一般写在“App.Shared"之中。
现在,演练往窗体“MainPage"中添加代码。
打开”App1.Shared"里的“Mainpage.xaml"
把编辑器中的“App1.Mobile"下拉框改为“App1.UWP"。这或许是为了调出设计器。Uno Platform 是与 UWP 兼容的。
关闭标签页“MainPage.xaml"。在解决方案资源管理器中重新打开该文件,会发现多了设计器。
把设计器的缩放比例(红圈处)改为 50% 以便设计。
在设计器中添加一个按钮,并在属性窗格中设置该按钮的名称为“Button1",选中写有“Hello, world"的 TextBlock,并在属性窗格中设置该按钮的名称为“TextBlock1"。
在设计器上双击按钮来给按钮增加点击事件。设计器可能会崩溃,没有关系,重启设计器。
在解决方案资源管理器的搜索框中填入”MainPage.xaml.cs”,并打开这个文件。
并修改代码。
private void Button_Click(object sender, RoutedEventArgs e) { //在这里填入代码。 TextBlock1.Text = "Hello, you!"; }
点击菜单上的“►本地计算机”,进行调试。
当项目生成完毕,会自动运行。
点击窗体中的按钮,TextBlock1中的内容会改变。
接着尝试其他配置,例如更改配置为“App1.wpf",调试,弹出程序窗体,同样点击窗体中的按钮,TextBlock1中的内容同样会改变。
6.为 Android 手机构建项目
用一个管理员身份的终端(例如 PowerShell)运行“dotnet workload install android”,等待下载安装结束。
例如,在 Windows 11 上,右击开始菜单图标,在右键菜单中选择“Windows 终端(管理员)”来运行管理员身份的 PowerShell。
当终端出现“已成功安装的工作负载 android。”的字样时,表示安装完成。
重启 VS ,再次打开解决方案。
修改配置为如图所示:
点击菜单上的“►Android Emulator”,进行调试。
VS 会弹出 Android SDK 许可接受情况的框,点击接受。
VS 需要一段时间下载安装安卓模拟器等组件。
当安装完成,VS 底部的状态栏写着“就绪”时,再次点击菜单上的“►Android Emulator”,进行调试。
会弹出如下窗口,点击“Create”。
之后会弹出如下窗口,点击“接受”按钮。
之后,VS 需要一段时间下载并解压缩模拟器的 ROM。
VS 处理完毕后,点击“启动”按钮。
会出现如下对话框,点击“仍要运行”。如果你不嫌麻烦,可以看文档操作。
等待安卓虚拟机启动。
不知道为什么,Android Emulator 一直黑屏。这个问题留待日后解决。
自此,演练结束。
如果是平台相关的代码就写在各自的项目中。
Uno Platform 不是基于原生控件的,它只是以原生用户界面工具包的窗口作为宿主,把内容放在撑满整个窗口的一个 Skia 画布中。
“App1.Mobile"负责 Android 和 iOS 和 Mac OS 平台。
"App1.Skia.Gtk"负责 Linux 等支持 GTK 的平台。
“App1.Skia.Wpf”和“App1.Skia.Wpf.Host"负责支持 Windows 7 和 8 等较旧版本的 Windows。
“App1.UWP”负责支持 UWP 的平台。这是默认值。
“App1.Wasm”负责把软件编译为 WebAssembly 内容,来把软件嵌入到网页中。
常见问题:
问:VS 在“解决方案资源管理器”中用提示我安装其他组件,怎么办?
答:酌情安装。如果你要用“Skia.Wpf”来兼容 Windows 7 等旧版 Windows,需要安装“使用 .NET 的桌面开发”。
问:换了一个编译目标的配置,出现一大堆错误是怎么回事?
答:每一个新建的解决方案,对于每一个不同的配置,首次用该配置构建项目时,都要保持网络良好,这是因为第一次构建时 VS 要先下载相关的包,不然会编译或运行出错。



