Files
LanMountainDesktop/.trae/specs/avalonia-12-migration/spec.md
lincube 9fb41378eb 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.
2026-04-29 08:50:28 +08:00

64 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 赋值代码