WPF 桌面软件开发
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_95bc37fb/program-dev-skill。
技能介绍
要解决什么问题
同一个 WPF 项目常常出现这些「不一致」:ViewModel 有的继承 BindableBase,有的用 Fody 特性;View 里按钮样式随手写死,偏离库默认风格;slnx 移个位置就 MSB3202 找不到项目;最麻烦的是 Python 项目往 C#/WPF 移植时,文本读写的行尾和 BOM 悄悄变了,输出文件字节级不一致。
这个技能把 GitPatchEditorWpf(Git Patch 编辑工具,由 Python/tkinter 移植为 C#/WPF)实战中踩过的坑沉淀成规范。
它是怎么工作的
- 骨架与依赖:slnx 放外层目录,项目目录扁平化;csproj 引入
WPFTemplateLib(NuGet 包,不复制源码)和PropertyChanged.Fody,并配好FodyWeavers.xml。 - ViewModel 分层:轻量数据项用
SimpleBindableBase,复杂功能用ViewModelBase;配合 Fody 织入,属性直接写自动属性,集合用ObservableCollection,命令用RelayCommand。 - View 约定:每个 View 根元素加
d:DataContext设计时声明,clr-namespace必须映射项目实际命名空间;按钮不写Style,交给DefaultThemeDictionary隐式接管;XAML 用 Grid 时除首个元素外都显式指定行列。 - 跨语言移植:先通读原项目源码再按 MVVM 分层实现,核心解析/生成逻辑保持字节级等价(保留原始行尾,读写用 UTF-8 无 BOM),最后用临时验证程序做输入输出比对。
- 验证闭环:
dotnet build要求 0 警告 0 错误,反射确认INotifyPropertyChanged织入,启动确认无XamlParseException。
适用边界与注意点
- 面向 net472 或 net60 +
UseWPF的传统 WPF 桌面应用,不适用于 WinForms、UWP/WinUI 或 MAUI。 - 强绑定
WPFTemplateLib(dlgcy 维护,NuGet 官方源)和PropertyChanged.Fody;若项目不用该样式库,View 与 App.xaml 部分需自行裁剪。 - 已知坑里最容易踩的是 App.xaml 被写出副本导致
x:Class冲突、退出码-532462766,需删 obj 残留后全量重建。
使用场景
- 从零新建 WPF 桌面工具,需要按规范搭 slnx + csproj 骨架、引入 WPFTemplateLib 和 Fody 依赖
- 把 Python/tkinter 写的补丁编辑工具移植到 C#/WPF,要求解析逻辑与输出文件字节级一致
- 已有 WPF 项目缺 ViewModel 和样式资源,需要补齐设计时 DataContext、命令与主题字典
- slnx 移动后报 MSB3202,或 App.xaml 出现副本导致启动异常退出,需要定位并修复
适合人员
- 初次承担 WPF 客户端交付的 C# 工程师,想按 MVVM 分层和依赖清单搭出可维护的项目骨架
- 正在把 Python 桌面工具迁移到 WPF 的开发者,担心行尾与 BOM 处理改变原有输出结果
- 接手他人 WPF 代码库的技术负责人,需要统一 ViewModel 基类、命令与样式约定降低改动风险