diff --git a/skills/README.md b/skills/README.md new file mode 100644 index 00000000..c610c7ee --- /dev/null +++ b/skills/README.md @@ -0,0 +1,58 @@ +# HandyControl WPF 控件 Skills + +参照 [Syncfusion WPF skills](https://github.com/syncfusion/wpf-ui-components-skills/tree/master/skills) 的“每控件一个 Skill + 按需 references”组织方式,为当前 HandyControl WPF 实现编写。内容从本仓库源码、样式和中文文档生成,不包含 Syncfusion 的实现文档或 API。 + +共 82 个 Skill:79 个已文档化的扩展控件主题,以及接入入口、主题、原生控件样式。一个主题可能包含多个类型,例如 grid 对应 Row/Col,loading 对应 LoadingLine/LoadingCircle。范围为 `doc/source/handycontrol/extend_controls/*/index.md`;未文档化类型可通过入口 Skill 按源码查找,不代表已单独提供 Skill。Avalonia 不在此集合内。 + +## 安装与使用 + +需要 Python 3.9 或更新版本,无第三方依赖。在仓库根目录执行: + +```powershell +# 仅安装接入入口(默认安装到 CODEX_HOME/skills 或 ~/.codex/skills) +python skills/scripts/install_skills.py + +# 按需安装控件;每个控件 Skill 自带接入说明与 API 导航,可独立使用 +python skills/scripts/install_skills.py handycontrol-wpf-numeric-up-down handycontrol-wpf-dialog handycontrol-wpf-growl + +# 查看名称 / 安装全部 / 更新已安装文件 +python skills/scripts/install_skills.py --list +python skills/scripts/install_skills.py --all +python skills/scripts/install_skills.py --all --force + +# 项目内安装(Codex 可发现的项目技能目录);其他支持 SKILL.md 的工具也可指定目录 +python skills/scripts/install_skills.py --all --dest .agents/skills +``` + +默认不会覆盖已有同名目录;`--force` 更新文件但不删除额外文件。安装器先检查全部名称与目标目录,再复制;不修改业务工程、NuGet 引用或 AGENTS.md。不要把 skills/scripts 或 templates 当作独立 Skill 安装。 + +安装后在新会话中使用,例如: + +```text +使用 $handycontrol-wpf,在当前 WPF 工程接入 HandyControl。 +使用 $handycontrol-wpf-numeric-up-down,实现数量输入,范围 1–999,双向绑定到 Quantity。 +使用 $handycontrol-wpf-dialog,实现带关闭按钮的页面内对话框。 +使用 $handycontrol-wpf-native-styles,为现有原生 Button、TextBox 应用 HandyControl 样式。 +使用 $handycontrol-wpf-theming,为现有应用添加深色皮肤。 +``` + +## 文件与维护 + +- `handycontrol-wpf/SKILL.md`:统一入口,提供接入流程、排错及控件选择。 +- `handycontrol-wpf/references/controls.md`:完整控件索引。 +- `handycontrol-wpf-*/SKILL.md`:独立控件的使用约束、最小示例(适用时)。 +- `references/api.md`:公共声明和本库基类导航;仅声明摘录,不可当作完整代码编译。 +- `references/usage.md`:对应文档、样式和 Demo 源码位置。 +- `agents/openai.yaml`:Codex 展示信息和调用提示,保留默认自动发现行为。 +- `templates/`:维护接入、主题、原生样式手写内容的源文件。 +- `scripts/build_skills.py`:生成全部 Skill;特殊用法和精选示例在 NOTES / EXAMPLES 中维护。 +- `scripts/validate_skills.py`:检查生成一致性、元信息、引用、源码路径和 XML 语法。 + +```powershell +python skills/scripts/build_skills.py +python skills/scripts/validate_skills.py +``` + +修改生成文件后应同步修改模板或生成器,再重新生成。`build_skills.py --check` 只检查,不写入。删除控件主题时,生成器会报告遗留 Skill,由维护者确认后手动移除,避免自动删除用户内容。 + +API 摘录不含所有继承成员、访问器或条件编译分支。在线源码链接指向 master,使用旧 NuGet 包时需核对对应版本;优先以实际引用版本源码为准。XML 语法校验不等于 WPF 编译、资源解析或运行时验证。可继续使用“代码审查”检查使用这些 Skill 后生成的具体实现。 diff --git a/skills/catalog.json b/skills/catalog.json new file mode 100644 index 00000000..c9ae59c2 --- /dev/null +++ b/skills/catalog.json @@ -0,0 +1,86 @@ +{ + "skills": [ + "handycontrol-wpf", + "handycontrol-wpf-animation-path", + "handycontrol-wpf-badge", + "handycontrol-wpf-blur-window", + "handycontrol-wpf-button-group", + "handycontrol-wpf-calendar-with-clock", + "handycontrol-wpf-card", + "handycontrol-wpf-carousel", + "handycontrol-wpf-chat-bubble", + "handycontrol-wpf-check-combo-box", + "handycontrol-wpf-circle-panel", + "handycontrol-wpf-circle-progress-bar", + "handycontrol-wpf-clock", + "handycontrol-wpf-color-picker", + "handycontrol-wpf-combo-box", + "handycontrol-wpf-compare-slider", + "handycontrol-wpf-context-menu-button", + "handycontrol-wpf-cover-flow", + "handycontrol-wpf-cover-view", + "handycontrol-wpf-dashed-border", + "handycontrol-wpf-date-picker", + "handycontrol-wpf-date-time-picker", + "handycontrol-wpf-dialog", + "handycontrol-wpf-divider", + "handycontrol-wpf-drawer", + "handycontrol-wpf-flip-clock", + "handycontrol-wpf-floating-block", + "handycontrol-wpf-gif-image", + "handycontrol-wpf-glow-window", + "handycontrol-wpf-goto-top", + "handycontrol-wpf-gravatar", + "handycontrol-wpf-grid", + "handycontrol-wpf-growl", + "handycontrol-wpf-honeycomb-panel", + "handycontrol-wpf-image-block", + "handycontrol-wpf-image-browser", + "handycontrol-wpf-image-selector", + "handycontrol-wpf-image-viewer", + "handycontrol-wpf-loading", + "handycontrol-wpf-magnifier", + "handycontrol-wpf-message-box", + "handycontrol-wpf-native-styles", + "handycontrol-wpf-notification", + "handycontrol-wpf-notify-icon", + "handycontrol-wpf-numeric-up-down", + "handycontrol-wpf-outline-text", + "handycontrol-wpf-pagination", + "handycontrol-wpf-password-box", + "handycontrol-wpf-pin-box", + "handycontrol-wpf-pop-tip", + "handycontrol-wpf-popup-window", + "handycontrol-wpf-preview-slider", + "handycontrol-wpf-progress-button", + "handycontrol-wpf-property-grid", + "handycontrol-wpf-range-slider", + "handycontrol-wpf-rate", + "handycontrol-wpf-relative-panel", + "handycontrol-wpf-running-block", + "handycontrol-wpf-screenshot", + "handycontrol-wpf-scroll-viewer", + "handycontrol-wpf-search-bar", + "handycontrol-wpf-shield", + "handycontrol-wpf-side-menu", + "handycontrol-wpf-simple-items-control", + "handycontrol-wpf-simple-panel", + "handycontrol-wpf-simple-text", + "handycontrol-wpf-split-button", + "handycontrol-wpf-sprite", + "handycontrol-wpf-step-bar", + "handycontrol-wpf-tab-control", + "handycontrol-wpf-tag", + "handycontrol-wpf-text-box", + "handycontrol-wpf-theming", + "handycontrol-wpf-time-bar", + "handycontrol-wpf-time-picker", + "handycontrol-wpf-toggle-block", + "handycontrol-wpf-transfer", + "handycontrol-wpf-transitioning-content-control", + "handycontrol-wpf-waterfall-panel", + "handycontrol-wpf-watermark", + "handycontrol-wpf-wave-progress-bar", + "handycontrol-wpf-window" + ] +} diff --git a/skills/handycontrol-wpf-animation-path/SKILL.md b/skills/handycontrol-wpf-animation-path/SKILL.md new file mode 100644 index 00000000..b3a37a0b --- /dev/null +++ b/skills/handycontrol-wpf-animation-path/SKILL.md @@ -0,0 +1,30 @@ +--- +name: handycontrol-wpf-animation-path +description: "实现、配置或排查 HandyControl WPF 的 AnimationPath 动画路径(AnimationPath)。适用于该扩展控件的 XAML、绑定、事件和模板;不用于 Avalonia 或其他厂商控件。" +--- + +# HandyControl WPF AnimationPath 动画路径 + +实现或排查 **AnimationPath 动画路径**。相关类型:`AnimationPath`。 + +## 接入 + +程序集/NuGet 为 `HandyControl`,XAML 命名空间为 +`xmlns:hc="https://handyorg.github.io/handycontrol"`,C# 控件命名空间为 `HandyControl.Controls`。 +在 `App.xaml` 合并 `pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml`, +然后合并 `pack://application:,,,/HandyControl;component/Themes/Theme.xaml`。 +已有主题配置时先检查,避免重复合并。版本和目标框架以使用方项目为准。 + +## 实现 + +先读 [API 声明与继承关系](references/api.md),再按需求查看 +[文档、样式与示例导航](references/usage.md)。源码路径相对于 HandyControl 仓库根目录; +在本仓库优先读本地文件,安装到其他项目后使用内附声明与链接,遇到版本差异检查实际引用版本的源码。 +不要将 Demo 的 langs、ex:Lang、ViewModelLocator 或示例资源直接复制进使用方项目。 + +结合基类确认内容模型、绑定属性和事件参数;集合控件区分 ItemsSource、选中项与 ItemTemplate;修改样式前核对资源键和模板部件。 + +用目标项目现有的 MVVM 方式绑定;需要回写时明确 TwoWay 和更新时机, +不要假定所有依赖属性默认双向绑定。原生 WPF 与 HandyControl 同名类型使用命名空间区分。 +交付时运行目标框架的构建,并在窗口加载后检查模板、绑定错误、空值和相关输入边界; +无法运行 WPF 时明确说明尚未验证 UI 行为。 diff --git a/skills/handycontrol-wpf-animation-path/agents/openai.yaml b/skills/handycontrol-wpf-animation-path/agents/openai.yaml new file mode 100644 index 00000000..7657a288 --- /dev/null +++ b/skills/handycontrol-wpf-animation-path/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "HandyControl WPF AnimationPath 动画路径" + short_description: "Implement HandyControl WPF controls from verified source guidance" + default_prompt: "Use $handycontrol-wpf-animation-path to implement the requested HandyControl WPF UI." diff --git a/skills/handycontrol-wpf-animation-path/references/api.md b/skills/handycontrol-wpf-animation-path/references/api.md new file mode 100644 index 00000000..282de9ea --- /dev/null +++ b/skills/handycontrol-wpf-animation-path/references/api.md @@ -0,0 +1,19 @@ +# 源码 API 导航 + +下面是当前工作区的声明摘录,不是完整 C# 文件,不包含全部继承成员、访问器和条件编译条件。属性是否可写、依赖属性默认值、枚举成员和目标框架限制,需打开对应源码核对。 + +## AnimationPath + +源码:[src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs](https://github.com/HandyOrg/HandyControl/blob/master/src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs) + +```text +public class AnimationPath : Shape +public Geometry Data +public double PathLength +public Duration Duration +public bool IsPlaying +public RepeatBehavior RepeatBehavior +public FillBehavior FillBehavior +public AnimationPath() +public event EventHandler Completed +``` diff --git a/skills/handycontrol-wpf-animation-path/references/usage.md b/skills/handycontrol-wpf-animation-path/references/usage.md new file mode 100644 index 00000000..2bea82c8 --- /dev/null +++ b/skills/handycontrol-wpf-animation-path/references/usage.md @@ -0,0 +1,16 @@ +# AnimationPath 动画路径 使用导航 + +文档:[doc/source/handycontrol/extend_controls/animationPath/index.md](https://github.com/HandyOrg/HandyControl/blob/master/doc/source/handycontrol/extend_controls/animationPath/index.md) + +在线文档:[控件说明](https://handyorg.github.io/handycontrol/extend_controls/animationPath/) + +按任务阅读原文中的章节:属性、Data 数据、PathLength 路径长度、Duration 时间间隔、IsPlaying 是否正在播放动画、RepeatBehavior 重复行为、继承自Shape常用属性、相关事件、Completed。 + +## 当前源码 + +- [src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs](https://github.com/HandyOrg/HandyControl/blob/master/src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs) + +## 样式及官方示例 + +- [src/Shared/HandyControlDemo_Shared/UserControl/Controls/AnimationPathDemo.xaml](https://github.com/HandyOrg/HandyControl/blob/master/src/Shared/HandyControlDemo_Shared/UserControl/Controls/AnimationPathDemo.xaml) +- [src/Shared/HandyControlDemo_Shared/UserControl/Controls/AnimationPathDemo.xaml.cs](https://github.com/HandyOrg/HandyControl/blob/master/src/Shared/HandyControlDemo_Shared/UserControl/Controls/AnimationPathDemo.xaml.cs) diff --git a/skills/handycontrol-wpf-badge/SKILL.md b/skills/handycontrol-wpf-badge/SKILL.md new file mode 100644 index 00000000..e9d90bde --- /dev/null +++ b/skills/handycontrol-wpf-badge/SKILL.md @@ -0,0 +1,43 @@ +--- +name: handycontrol-wpf-badge +description: "实现、配置或排查 HandyControl WPF 的 Badge 标记(Badge)。适用于该扩展控件的 XAML、绑定、事件和模板;不用于 Avalonia 或其他厂商控件。" +--- + +# HandyControl WPF Badge 标记 + +实现或排查 **Badge 标记**。相关类型:`Badge`。 + +## 接入 + +程序集/NuGet 为 `HandyControl`,XAML 命名空间为 +`xmlns:hc="https://handyorg.github.io/handycontrol"`,C# 控件命名空间为 `HandyControl.Controls`。 +在 `App.xaml` 合并 `pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml`, +然后合并 `pack://application:,,,/HandyControl;component/Themes/Theme.xaml`。 +已有主题配置时先检查,避免重复合并。版本和目标框架以使用方项目为准。 + +## 实现 + +先读 [API 声明与继承关系](references/api.md),再按需求查看 +[文档、样式与示例导航](references/usage.md)。源码路径相对于 HandyControl 仓库根目录; +在本仓库优先读本地文件,安装到其他项目后使用内附声明与链接,遇到版本差异检查实际引用版本的源码。 +不要将 Demo 的 langs、ex:Lang、ViewModelLocator 或示例资源直接复制进使用方项目。 + +结合基类确认内容模型、绑定属性和事件参数;集合控件区分 ItemsSource、选中项与 ItemTemplate;修改样式前核对资源键和模板部件。 + +用目标项目现有的 MVVM 方式绑定;需要回写时明确 TwoWay 和更新时机, +不要假定所有依赖属性默认双向绑定。原生 WPF 与 HandyControl 同名类型使用命名空间区分。 +交付时运行目标框架的构建,并在窗口加载后检查模板、绑定错误、空值和相关输入边界; +无法运行 WPF 时明确说明尚未验证 UI 行为。 + +## 最小片段 + +依赖上面的应用资源配置;Binding 路径由使用方 ViewModel 提供。 + +```xml + +