mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-22 00:54:26 +08:00
Migrate codebase to Avalonia 12 APIs
Apply Avalonia 12 migration changes: replace SystemDecorations with WindowDecorations and remove ExtendClientAreaChromeHints/ExtendClientAreaTitleBarHeightHint usages; update BindingPlugins removal logic (no-op); switch clipboard usage to ClipboardExtensions.SetTextAsync; update Bitmap.CopyPixels calls to the new signature. Replace TextBox.Watermark with PlaceholderText, convert NumberBox styles to FANumberBox and adjust templates, change Checked/Unchecked handlers to IsCheckedChanged, and adapt FluentIcons usages (SymbolIconSource -> FASymbol/FAFont/FluentIcon equivalents). Fix MainWindow partial classes to inherit Window and correct missing variables/fields/usings. Add migration docs/specs/tasks under .trae and include a small TestFluentIcons project for icon testing.
This commit is contained in:
14
.trae/specs/avalonia-12-migration/checklist.md
Normal file
14
.trae/specs/avalonia-12-migration/checklist.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Checklist
|
||||
|
||||
- [ ] `SettingsWindow.ApplyChromeMode()` 不再使用 `ExtendClientAreaChromeHints` 和 `SystemDecorations`
|
||||
- [ ] `ComponentEditorWindow.ApplyChromeMode()` 不再使用 `ExtendClientAreaChromeHints` 和 `SystemDecorations`
|
||||
- [ ] 所有 `.axaml` 文件中的 `SystemDecorations` 已替换为 `WindowDecorations`
|
||||
- [ ] `MainWindow.ComponentSystem.cs` 中 `centerLeft` 和 `positions` 变量已正确定义
|
||||
- [ ] `MainWindow.DesktopPaging.cs` 中 `child` 和 `_isThreeFingerOrRightDragSwipeActive` 变量已正确定义
|
||||
- [ ] `App.axaml.cs` 中 `BindingPlugins.DataValidators` 代码已移除
|
||||
- [ ] `DesktopComponentFailureView.cs` 使用 `ClipboardExtensions.SetTextAsync`
|
||||
- [ ] `MonetColorService.cs` 使用正确的 `Bitmap.CopyPixels` 签名
|
||||
- [ ] `SettingsWindow.axaml.cs` 使用 `FluentIcons.Avalonia.FluentIcon` 替代 `SymbolIconSource`
|
||||
- [ ] 所有 `TextBox.Watermark` 已替换为 `PlaceholderText`
|
||||
- [ ] `dotnet build LanMountainDesktop.slnx -c Debug` 0 errors, 0 warnings(过时 API 警告)
|
||||
- [ ] `dotnet test LanMountainDesktop.slnx -c Debug` 全部通过
|
||||
63
.trae/specs/avalonia-12-migration/spec.md
Normal file
63
.trae/specs/avalonia-12-migration/spec.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# Avalonia 12 迁移规格
|
||||
|
||||
## Why
|
||||
|
||||
Avalonia 12 带来性能改进(SkiaSharp 3.0、编译绑定默认开启)、新的窗口装饰体系(WindowDrawnDecorations)和更简洁的 API 设计。项目当前已升级包引用,但存在 18 个编译错误和若干过时 API 警告,需要系统性修复以确保构建通过。
|
||||
|
||||
## What Changes
|
||||
|
||||
- **BREAKING**: 移除 `ExtendClientAreaChromeHints` 和 `SystemDecorations` 的使用,迁移到 `WindowDecorations`
|
||||
- **BREAKING**: 移除 `BindingPlugins.DataValidators` 的使用(v12 已移除绑定插件体系)
|
||||
- **BREAKING**: 替换 `IClipboard.SetTextAsync` 为 `ClipboardExtensions.SetTextAsync`
|
||||
- **BREAKING**: 更新 `Bitmap.CopyPixels` 调用签名(移除 `AlphaFormat` 参数)
|
||||
- **BREAKING**: 替换 `FluentIcons.Avalonia.SymbolIconSource` 为 v3 等效 API
|
||||
- 修复 `MainWindow.ComponentSystem.cs` 和 `MainWindow.DesktopPaging.cs` 中缺失的字段/变量
|
||||
- 批量替换 `TextBox.Watermark` → `PlaceholderText`
|
||||
|
||||
## Impact
|
||||
|
||||
- 受影响代码:
|
||||
- `LanMountainDesktop/Views/SettingsWindow.axaml.cs`
|
||||
- `LanMountainDesktop/Views/ComponentEditorWindow.axaml.cs`
|
||||
- `LanMountainDesktop/Views/MainWindow.ComponentSystem.cs`
|
||||
- `LanMountainDesktop/Views/MainWindow.DesktopPaging.cs`
|
||||
- `LanMountainDesktop/App.axaml.cs`
|
||||
- `LanMountainDesktop/Views/Components/DesktopComponentFailureView.cs`
|
||||
- `LanMountainDesktop/Services/MonetColorService.cs`
|
||||
- 13 个 `.axaml` 文件(`SystemDecorations` → `WindowDecorations`)
|
||||
- 7 个 `.cs` 文件 + 7 个 `.axaml` 文件(`Watermark` → `PlaceholderText`)
|
||||
- 受影响规格:无现有规格直接关联
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 窗口装饰 API 迁移
|
||||
系统 SHALL 使用 Avalonia 12 的 `WindowDecorations` 属性替代已移除的 `SystemDecorations` 和 `ExtendClientAreaChromeHints`。
|
||||
|
||||
#### Scenario: SettingsWindow 无边框模式
|
||||
- **WHEN** `ApplyChromeMode(false)` 被调用
|
||||
- **THEN** `WindowDecorations = WindowDecorations.BorderOnly` 且 `ExtendClientAreaToDecorationsHint = true`
|
||||
|
||||
#### Scenario: SettingsWindow 系统 Chrome 模式
|
||||
- **WHEN** `ApplyChromeMode(true)` 被调用
|
||||
- **THEN** `WindowDecorations = WindowDecorations.Full` 且 `ExtendClientAreaToDecorationsHint = true`
|
||||
|
||||
### Requirement: 剪贴板 API 迁移
|
||||
系统 SHALL 使用 Avalonia 12 的 `ClipboardExtensions.SetTextAsync` 替代已移除的 `IClipboard.SetTextAsync`。
|
||||
|
||||
### Requirement: Bitmap.CopyPixels 签名更新
|
||||
系统 SHALL 使用新的 `CopyPixels` 签名,不再传入 `AlphaFormat` 参数。
|
||||
|
||||
### Requirement: FluentIcons v3 API 适配
|
||||
系统 SHALL 使用 `FluentIcons.Avalonia.FluentIcon` 替代已移除的 `SymbolIconSource`。
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: 编译绑定验证
|
||||
- **修改前**:`BindingPlugins.DataValidators.RemoveAt(0)` 移除默认数据注解验证插件
|
||||
- **修改后**:v12 默认禁用数据注解验证插件,无需手动移除
|
||||
|
||||
## REMOVED Requirements
|
||||
|
||||
### Requirement: ExtendClientAreaChromeHints 配置
|
||||
**Reason**: Avalonia 12 移除此属性,由 `WindowDecorations` 统一管理
|
||||
**Migration**: 删除所有 `ExtendClientAreaChromeHints` 赋值代码
|
||||
39
.trae/specs/avalonia-12-migration/tasks.md
Normal file
39
.trae/specs/avalonia-12-migration/tasks.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Tasks
|
||||
|
||||
- [ ] Task 1: 修复窗口装饰 API(Phase 1)
|
||||
- [x] SubTask 1.1: 重写 `SettingsWindow.ApplyChromeMode()` 移除 `ExtendClientAreaChromeHints`
|
||||
- [x] SubTask 1.2: 重写 `ComponentEditorWindow.ApplyChromeMode()` 移除 `ExtendClientAreaChromeHints`
|
||||
- [x] SubTask 1.3: 批量替换所有 `.axaml` 中的 `SystemDecorations` → `WindowDecorations`
|
||||
- [ ] SubTask 1.4: 验证构建错误减少
|
||||
|
||||
- [ ] Task 2: 修复 MainWindow 编译错误(Phase 2)
|
||||
- [ ] SubTask 2.1: 修复 `MainWindow.ComponentSystem.cs` 中 `centerLeft` 和 `positions` 未定义错误
|
||||
- [ ] SubTask 2.2: 修复 `MainWindow.DesktopPaging.cs` 中 `child` 和 `_isThreeFingerOrRightDragSwipeActive` 未定义错误
|
||||
- [ ] SubTask 2.3: 验证构建错误减少
|
||||
|
||||
- [ ] Task 3: 修复 Avalonia 12 API 变更(Phase 3)
|
||||
- [ ] SubTask 3.1: 移除 `App.axaml.cs` 中 `BindingPlugins.DataValidators` 代码
|
||||
- [ ] SubTask 3.2: 替换 `DesktopComponentFailureView.cs` 中 `IClipboard.SetTextAsync` 为 `ClipboardExtensions.SetTextAsync`
|
||||
- [ ] SubTask 3.3: 更新 `MonetColorService.cs` 中 `Bitmap.CopyPixels` 调用签名
|
||||
- [ ] SubTask 3.4: 验证构建错误减少
|
||||
|
||||
- [ ] Task 4: 修复第三方库变更(Phase 4)
|
||||
- [ ] SubTask 4.1: 替换 `SettingsWindow.axaml.cs` 中 `FluentIcons.Avalonia.SymbolIconSource` 为 `FluentIcon`
|
||||
- [ ] SubTask 4.2: 验证构建错误减少
|
||||
|
||||
- [ ] Task 5: 清理过时属性(Phase 5)
|
||||
- [ ] SubTask 5.1: 批量替换 `.cs` 文件中 `Watermark` → `PlaceholderText`
|
||||
- [ ] SubTask 5.2: 批量替换 `.axaml` 文件中 `Watermark` → `PlaceholderText`
|
||||
- [ ] SubTask 5.3: 验证无过时警告
|
||||
|
||||
- [ ] Task 6: 最终验证
|
||||
- [ ] SubTask 6.1: `dotnet build LanMountainDesktop.slnx -c Debug` 0 errors
|
||||
- [ ] SubTask 6.2: `dotnet test LanMountainDesktop.slnx -c Debug` 通过
|
||||
|
||||
# Task Dependencies
|
||||
|
||||
- Task 2 不依赖 Task 1(可并行)
|
||||
- Task 3 不依赖 Task 1/2(可并行)
|
||||
- Task 4 不依赖 Task 1/2/3(可并行)
|
||||
- Task 5 依赖 Task 1/2/3/4(低优先级,最后执行)
|
||||
- Task 6 依赖所有前置任务
|
||||
Reference in New Issue
Block a user