plugins/languages/csharp/skills/desktop/SKILL.md
C# 桌面与跨平台 GUI 开发规范。覆盖 WPF / .NET MAUI / Avalonia UI / WinUI 3、 CommunityToolkit.Mvvm source generators、MVVM 数据绑定、UI 线程调度、 Dispatcher / MainThread、长任务取消、热重载、AOT 发布。当开发桌面应用、 跨平台客户端、GUI 界面, 或说 "WPF"、"MAUI"、"Avalonia"、"WinUI"、"MVVM"、 "XAML"、"数据绑定"、"DependencyProperty"、"ObservableProperty" 时加载。
npx skillsauth add lazygophers/ccplugin csharp-desktopInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
跨平台桌面优先 Avalonia / .NET MAUI; Windows-only 业务桌面用 WPF; 新 Win 应用 WinUI 3 + WindowsAppSDK。
| 场景 | 推荐 | |------|------| | 移动 + 桌面 (iOS/Android/Mac/Win) | .NET MAUI | | 桌面跨平台 (Win/Mac/Linux) | Avalonia UI | | Windows 现代应用 (MSIX) | WinUI 3 | | Windows 传统业务、生态成熟 | WPF |
source generator 消除样板:
public partial class OrderViewModel(IOrderService svc) : ObservableObject
{
[ObservableProperty] private string _query = "";
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(SearchCommand))]
private bool _isLoading;
public ObservableCollection<OrderDto> Items { get; } = [];
[RelayCommand(CanExecute = nameof(CanSearch),
AllowConcurrentExecutions = false,
IncludeCancelCommand = true)]
private async Task SearchAsync(CancellationToken ct)
{
IsLoading = true;
try
{
Items.Clear();
await foreach (var o in svc.SearchAsync(Query, ct))
Items.Add(o);
}
finally { IsLoading = false; }
}
private bool CanSearch() => !IsLoading && !string.IsNullOrWhiteSpace(Query);
}
[RelayCommand] 自动生成 IAsyncRelayCommand + 取消支持[ObservableProperty]; 联动通知 [NotifyPropertyChangedFor]INotifyPropertyChanged 样板绝不在 UI 线程做阻塞 IO/CPU 工作。
| 框架 | 切回 UI 线程 |
|------|-------------|
| WPF | Application.Current.Dispatcher.InvokeAsync |
| WinUI 3 | DispatcherQueue.TryEnqueue |
| MAUI | MainThread.BeginInvokeOnMainThread |
| Avalonia | Dispatcher.UIThread.InvokeAsync |
异步事件处理器允许 async void, 但必须 try/catch 兜底, 错误送日志/UI 提示。
IValueConverter, 避免在 XAML 内联表达式过深ObservableCollection<T>; 高频更新批量 (Avalonia BatchUpdate、WPF CollectionViewSource.DeferRefresh)UpdateSourceTrigger=PropertyChanged 对实时校验有用, 但要权衡性能public partial class App : Application
{
private readonly IHost _host = Host.CreateDefaultBuilder()
.ConfigureServices(s =>
{
s.AddSingleton<MainWindow>();
s.AddTransient<OrderViewModel>();
s.AddHttpClient<IOrderService, OrderService>();
})
.Build();
protected override async void OnStartup(StartupEventArgs e)
{
await _host.StartAsync();
_host.Services.GetRequiredService<MainWindow>().Show();
}
}
MAUI: MauiApp.CreateBuilder().UseMauiApp<App>().UseMauiCommunityToolkit()。
App.xaml / Application.ResourcesResourceDictionary + dynamic resource, 便于主题切换Style + ControlTemplate; 不要直接改 control 默认 template 之外的内部结构<PublishAot>true</PublishAot> 或 ReadyToRun)Virtualization=true + ItemContainerStyle 复用Microsoft.Maui.Graphics; Avalonia 用 AsyncImageLoaderOnPropertyChanged 跑重计算; 提取到 background task[RelayCommand(IncludeCancelCommand = true)]
private async Task ExportAsync(CancellationToken ct)
{
Progress = 0;
await foreach (var p in _exporter.RunAsync(ct))
Progress = p;
}
IncludeCancelCommand 自动生成 ExportCancelCommand, 绑定到 UI 取消按钮。
Microsoft.Maui.TestUtils.DeviceTests、WPF/WinUI 用 Appium、Avalonia 用 Avalonia.HeadlessApplication.Current)<TrimMode>partial</TrimMode>dotnet publish -f net10.0-android 等)Microsoft.Windows.SDK.BuildToolstools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。