Day 1 - Avalonia 环境与运行
建议用时:240-300 分钟
你将学会什么
- Avalonia 是什么,它和控制台程序有什么区别
- 如何安装 Avalonia 模板
- 如何创建并运行第一个 Avalonia 应用
Program.cs、App.axaml、MainWindow.axaml分别负责什么- XAML 和 C# 在桌面应用里怎么分工
- 第一次窗口打不开时应该按什么顺序排查
从今天开始进入桌面应用。不要一上来追求复杂界面,先把“项目能创建、窗口能打开、XAML 能改、再运行能看到变化”这条最小闭环跑通。
本页固定顺序
- 先学第一部分:弄懂今天最小、最重要的知识,并运行短例子。
- 再学第二部分:把刚学的知识组合成一个完整例子。
- 然后做第三部分:自己跟着敲,再完成重复训练和每日小测。
- 最后做第四部分:先独立完成作业,再用完整答案检查。
学习衔接
上一页学习的是“第五周复盘与综合练习”,今天继续学习“Avalonia 环境与运行”。先使用上一页已经会的写法,再只增加今天这个新知识点;如果前置内容还不能独立敲出,先回上一页复习,不要硬跳。
今天的最低通过线
第一次学习不要求背完整页。完成下面 3 项,就可以继续:
- 能用自己的话说明“Avalonia 环境与运行”解决什么问题。
- 把第一部分的短例子亲手敲完,并确认每个例子都能运行。
- 不看完整答案完成第三部分至少前 3 个例子,再主动改一个值观察结果。
第一部分:先学原理和最小知识
这一部分从最小知识开始。先读解释,再把紧跟着的短例子敲一遍。先知道桌面应用和控制台程序的差别,再动手改窗口。
1. Avalonia 是什么
Avalonia 是一个 .NET 桌面 UI 框架。
你可以用 C# 写业务逻辑,用 XAML 写界面结构,做出 Windows、macOS、Linux 都能运行的桌面应用。
控制台程序主要靠:
Console.WriteLine
Console.ReadLineAvalonia 程序主要靠:
Window
Layout
Control
Event
Binding2. 桌面应用和控制台应用的区别
| 控制台应用 | Avalonia 桌面应用 |
|---|---|
入口在 Main | |
| 运行后看到文字窗口 | |
| 通过输入输出交互 | |
| 适合练习语法和业务规则 |
| Avalonia 桌面应用 | 说明 |
|---|---|
入口仍然在 Program.cs | |
| 运行后看到图形窗口 | |
| 通过按钮、输入框、列表交互 | |
| 适合做桌面工具和业务系统 |
3. XAML 是什么
XAML 是一种 XML 格式的界面描述语言。
它适合写:
- 窗口里有什么控件。
- 控件怎么排列。
- 控件文字是什么。
- 控件宽高、边距、样式。
- 绑定到哪个数据属性。
例如:
<TextBlock Text="欢迎使用 Avalonia" />这表示页面上有一段文字。
4. C# 负责什么
C# 负责:
- 程序启动。
- 业务规则。
- 按钮点击后的处理。
- ViewModel 数据。
- 文件、数据库、网络操作。
不要把所有业务都写进 XAML。
XAML 写界面结构,C# 写逻辑。
5. Program.cs 做什么
Program.cs 是程序入口。
Avalonia 模板里通常会看到:
using Avalonia;
namespace ProductApp;
sealed class Program
{
[STAThread]
public static void Main(string[] args)
{
BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
}
public static AppBuilder BuildAvaloniaApp()
{
return AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace();
}
}先不需要背这些细节。今天只要知道:它负责启动 Avalonia 应用。
6. App.axaml 做什么
App.axaml 是应用级配置。
以后会在这里放:
- 全局样式。
- 全局资源。
- 主题。
第一天先不要乱改它。
7. MainWindow.axaml 做什么
MainWindow.axaml 是主窗口界面。
今天改窗口,主要改这个文件。
典型结构:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ProductApp.Views.MainWindow"
Title="ProductApp">
<StackPanel>
<TextBlock Text="Hello Avalonia" />
</StackPanel>
</Window>8. 第一次运行失败怎么排查
按这个顺序:
- 确认
dotnet --version能输出版本。 - 确认安装过
Avalonia.Templates。 - 确认在项目目录里运行
dotnet run。 - 先不要改很多文件。
- 如果 XAML 报错,优先看标签有没有闭合、命名空间有没有写错。
- 如果 C# 报错,优先看第一条错误的文件名和行号。
Avalonia 环境常用命令和文件速查
| 需求 | 写法/文件 | 作用 |
|---|---|---|
| 创建 MVVM 项目 | dotnet new avalonia.mvvm -n MyApp | 创建 Avalonia 项目 |
| 运行项目 | dotnet run | 启动窗口 |
| 构建项目 | dotnet build | 检查 XAML 和 C# |
| 项目文件 | .csproj | NuGet 包和目标框架 |
| 应用入口 | Program.cs | 启动 Avalonia |
| 应用配置 | App.axaml、App.axaml.cs | 主题、资源、主窗口 |
| 主窗口 | Views/MainWindow.axaml | 界面结构 |
| 主窗口代码 | MainWindow.axaml.cs | 初始化窗口 |
| ViewModel | ViewModels/MainWindowViewModel.cs | 界面数据和命令 |
运行出错时先检查:
当前目录有没有 .csproj
dotnet build 是否通过
MainWindow.axaml 的 x:Class 是否和代码文件命名空间一致
ViewModel 命名空间是否和 XAML 里的 xmlns:vm 一致第二部分:把知识组合成完整例子
前面已经学过最小知识。现在把它们组合起来,先读懂执行顺序,再完整敲一遍。今天最终要能创建一个 Avalonia 项目,并打开一个窗口。
先看效果:创建并运行 Avalonia 项目
dotnet new install Avalonia.Templates
dotnet new avalonia.mvvm -o ProductApp
cd ProductApp
dotnet run成功后会出现一个桌面窗口。
官方模板创建后的关键文件大致是:
ProductApp/
ProductApp.csproj
Program.cs
App.axaml
App.axaml.cs
ViewLocator.cs
Views/
MainWindow.axaml
MainWindow.axaml.cs
ViewModels/
MainWindowViewModel.cs
ViewModelBase.cs今天最先关注三个文件:
| 文件 | 作用 |
|---|---|
Program.cs | 程序入口,启动 Avalonia |
App.axaml | 应用级配置和资源 |
Views/MainWindow.axaml | 主窗口界面 |
第一次打开 Avalonia 项目先看这条线
不要一开始就被所有文件吓住。先按启动顺序看:
Program.cs
-> 创建 App
-> App.axaml / App.axaml.cs 做应用级配置
-> MainWindow.axaml 打开主窗口
-> MainWindow.axaml.cs 配合窗口初始化
-> 窗口里显示控件最开始只需要知道:
| 想改什么 | 先看哪个文件 |
|---|---|
| 窗口标题、宽高、控件 | Views/MainWindow.axaml |
| 程序怎么启动 | Program.cs |
| 全局资源或主题 | App.axaml |
| 窗口初始化代码 | Views/MainWindow.axaml.cs |
今天不要急着改 ViewLocator 和复杂资源。先把主窗口能打开、文字能改、按钮能显示这条闭环跑通。
第三部分:跟着敲代码
从这里开始动手。每一步都先运行一次,不要一次改太多。
动手前先做这 3 件事
- 打开终端,确认能运行
dotnet --version。 - 找一个空文件夹练习,不要直接在重要项目里乱建。
- 每改完一个文件就运行
dotnet build或dotnet run。
例子 1:确认 .NET 环境
dotnet --version能看到版本号,说明 .NET SDK 可以使用。
例子 2:安装 Avalonia 模板
dotnet new install Avalonia.Templates如果提示模板已经安装,也可以继续下一步。
例子 3:创建 MVVM 项目
dotnet new avalonia.mvvm -o ProductApp这会创建一个名为 ProductApp 的 Avalonia 项目。
例子 4:运行项目
cd ProductApp
dotnet run成功后会打开窗口。第一次运行可能会稍慢,因为要还原依赖并编译。
例子 5:构建项目但不打开窗口
dotnet builddotnet build 只检查项目能不能编译,不打开窗口。改 XAML 后可以先用它检查语法。
例子 6:查看主窗口文件
你主要修改这个文件:
Views/MainWindow.axaml把窗口先改成最简单内容:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ProductApp.Views.MainWindow"
Width="420"
Height="260"
Title="Avalonia 运行成功">
<StackPanel Margin="24" Spacing="12">
<TextBlock Text="Avalonia 项目已经跑起来" FontSize="24" />
<Button Content="我看到了窗口" />
</StackPanel>
</Window>改完后运行:
dotnet run例子 7:认识 MainWindow.axaml.cs
Views/MainWindow.axaml.cs 通常长这样:
using Avalonia.Controls;
namespace ProductApp.Views;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}这个文件是窗口的 C# 代码部分。
今天先不要往里面写复杂逻辑,只要知道:
MainWindow.axaml 写界面。
MainWindow.axaml.cs 写这个窗口对应的 C# 代码。例子 8:第一天只做静态界面
把按钮点击、绑定、列表先放后面。第一天只确认:
- 项目能创建。
- 项目能运行。
- 主窗口能修改。
- 修改后窗口显示变化。
小白重复敲写训练
Avalonia 第一天先反复创建、运行、改一行文字。
训练 1:创建并运行项目
dotnet new avalonia.app -n HelloAvalonia
cd HelloAvalonia
dotnet run窗口出现后关闭,再运行第二遍。
训练 2:修改窗口标题
<Window
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="HelloAvalonia.MainWindow"
Title="我的第一个 Avalonia 程序"
Width="600"
Height="400">
</Window>改动任务:修改宽度、高度和标题,每次只改一个值。
训练 3:显示第一段文字
<Window
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="HelloAvalonia.MainWindow"
Title="Hello Avalonia"
Width="600"
Height="400">
<TextBlock
Text="Hello Avalonia"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Window>第三遍不看答案,自己写出居中的 TextBlock。
每日小测
做完本页后,用这 5 题检查是否真的掌握。
1. 判断题
本页的目标不是只把代码运行起来,还要能说清楚“为什么这样写”。
答案:对。能运行只是第一步,能解释原理、常用操作和常见错误,才说明本页内容进入了可复用能力。
2. 填空题
本页主题是:Avalonia 环境与运行。今天至少要掌握的 3 个点是:
1. Avalonia 是什么,它和控制台程序有什么区别
2. 如何安装 Avalonia 模板
3. 如何创建并运行第一个 Avalonia 应用答案:以上 3 点必须能用自己的代码跑通,不能只停留在阅读。
3. 流程题
遇到本页相关功能时,先按什么顺序处理?
答案:先看完整例子,确认最终效果;再读原理和名词;然后跟着第三部分从空项目敲代码;最后对照作业答案检查。
4. 找错误题
如果本页代码运行失败,第一步应该做什么?
答案:先看终端或 IDE 里的第一条错误,找到文件名和行号;不要同时改很多地方。再回到本页的“常见错误和修法”表格,对照错误类型逐项排查。
5. 改需求题
在本页完整例子跑通后,至少改一个小需求。
可选改法:
- 改一个字段名称。
- 多加一个校验条件。
- 多输出一行结果。
- 把固定数据改成用户输入。
- 把一次处理改成多条数据处理。
答案标准:修改后能重新运行,并能说明这次修改影响了哪一段逻辑。重点检查:Avalonia 是什么,它和控制台程序有什么区别。
上位机专项练习
从这一周开始进入 Avalonia。先跑通桌面窗口,再把标题改成你的第一台上位机。
下面 3 个例子都要亲手敲。先运行原代码,再完成每个例子后面的改动任务。
专项例子 1:MainWindow.axaml 设置窗口
<Window xmlns="https://github.com/avaloniaui"
Width="900" Height="600"
Title="设备监控上位机">
<TextBlock Text="系统已启动"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Window>运行结果或界面效果:
出现标题为“设备监控上位机”的窗口改动任务: 把标题改成“温控系统”。
专项例子 2:按钮响应点击
<StackPanel Margin="24" Spacing="12">
<TextBlock Name="StatusText" Text="尚未连接" />
<Button Content="连接设备" Click="Connect_Click" />
</StackPanel>运行结果或界面效果:
窗口显示状态文字和连接按钮改动任务: 把按钮文字改成“开始采集”。
专项例子 3:后台更新状态
private void Connect_Click(object? sender, RoutedEventArgs e)
{
StatusText.Text = "PLC-01 已连接";
}运行结果或界面效果:
点击按钮后显示 PLC-01 已连接改动任务: 点击后同时修改窗口标题。
第四部分:作业完整答案
这一部分给出当天作业的完整答案。
作业 1:创建并运行项目
完整命令
dotnet new install Avalonia.Templates
dotnet new avalonia.mvvm -o ProductApp
cd ProductApp
dotnet run作业 2:修改主窗口
把 Views/MainWindow.axaml 改成:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ProductApp.Views.MainWindow"
Width="420"
Height="260"
Title="Avalonia 运行成功">
<StackPanel Margin="24" Spacing="12">
<TextBlock Text="Avalonia 项目已经跑起来" FontSize="24" />
<TextBlock Text="今天只确认环境、项目结构和窗口显示。" />
<Button Content="我看到了窗口" />
</StackPanel>
</Window>作业验收
完成后检查:
dotnet --version有输出。dotnet new avalonia.mvvm -o ProductApp能创建项目。dotnet run能打开窗口。- 改
Views/MainWindow.axaml后,窗口内容会变化。 - 能说出
Program.cs、App.axaml、MainWindow.axaml分别负责什么。
本页最后要记住
- Avalonia 是 .NET 桌面 UI 框架。
dotnet new install Avalonia.Templates安装模板。dotnet new avalonia.mvvm -o ProductApp创建项目。dotnet run运行并打开窗口。- XAML 写界面结构,C# 写逻辑。
- 第一天只做最小闭环:能创建、能运行、能改窗口。