Files
AntdUI/CONTRIBUTING.zh.md
2025-08-29 19:23:51 +08:00

6.2 KiB
Raw Permalink Blame History

🦄 参与 AntdUI 贡献

本文档将介绍参与 AntdUI 贡献的标准和工作流程,帮助你顺利协作、保持代码一致性,并高效熟悉项目。

1. 目录结构

请先了解项目的目录布局,确保你的贡献内容放在正确位置:

AntdUI/
├─ src/                      # 所有核心库源代码
│  └─ AntdUI/                # 主UI库代码
│     ├─ Controls/           # 自定义UI控件
│     │  ├─ Core/            # 抽象绘制类和实现类(所有控件的基础)
│     │  └─ Chat/            # 聊天相关控件(因逻辑独立或代码量较大而单独存放)
│     ├─ Design/             # 设计器支持如Visual Studio设计器集成
│     ├─ Enum/               # 库中通用的枚举(如主题类型、控件状态)
│     ├─ Forms/              # 自定义窗口/表单(如主应用窗口)
│     ├─ LayeredWindow/      # 弹窗/分层窗口(如下拉框、日期选择器、模态框、抽屉等)
│     ├─ Lib/                # 工具文件Win32 API封装、SVG处理、辅助类
│     ├─ Localization/       # 多语言支持(不同地区的资源文件)
│     └─ Style/              # 主题定义(如明暗主题、调色板)
├─ samples/                  # 用于展示控件用法的示例项目
│  └─ Demo/                  # 主示例项目(包含所有控件的测试窗体)
└─ doc/                      # 文档贡献指南、API参考等
  • 新增控件:请添加到 src/AntdUI/Controls/(独立或大型控件可像 Chat/ 一样使用子文件夹)。
  • 工具代码辅助函数、Win32封装或SVG工具请放在 src/AntdUI/Lib/
  • 示例代码:请更新 samples/Demo/ 以包含新功能的测试用例(有助于验证功能并帮助其他贡献者)。

2. 代码规范

为保持一致性并避免常见问题如内存泄漏、UI异常请遵循以下核心规则

2.1 绘制逻辑要求

AntdUI 依赖自定义绘制系统实现高质量UI渲染。所有可视化控件需遵循

  • 必须实现 AntdUI.IControl 所有可绘制控件必须继承 AntdUI.IControl(自定义渲染的基础接口)。通过重写 OnDraw 方法实现控件特定绘制:

    public class MyCustomControl : IControl
    {
        // 重写OnDraw处理渲染逻辑
        protected override void OnDraw(DrawEventArgs e)
        {
            base.OnDraw(e);
            // 使用e.Canvas进行绘制见下方说明
            e.Canvas.DrawText("Hello AntdUI", _textFont, _textColor, ClientRectangle);
        }
    }
    
  • 使用 Canvas 进行渲染 Canvas 类(若无法继承 IControl,可通过 Graphics.High() 获取)提供高质量文本(如抗锯齿)和Emoji渲染支持——这些是GDI原生 Graphics 类不具备的特性。

    • 若无法继承 IControl(如系统控件封装),可这样使用 Canvas
      var canvas = e.Graphics.High(); // 获取Canvas实例
      string emoji = "👍";
      Size size = canvas.MeasureText(emoji, Font);
      canvas.DrawText(emoji, Font, Style.Db.Text, new Rectangle(0, 0, size.Width, size.Height));
      
  • 资源释放 GDI资源BitmapBrushPen)使用后必须立即释放,避免内存泄漏。推荐使用 using 语句自动释放:

    // 推荐使用using自动释放Brush
    using (var fillBrush = new SolidBrush(_backgroundColor))
    {
        e.Canvas.Fill(fillBrush, ClientRectangle);
    }
    
    // 避免:未释放非托管资源
    var badBrush = new SolidBrush(_backgroundColor); 
    e.Canvas.Fill(badBrush, ClientRectangle); // ❌ 导致内存泄漏
    

2.2 列表类控件规范

对于带滚动内容的控件(如列表框、数据网格),请遵循:

  • 使用 AntdUI.ScrollBar 禁止使用系统滚动条,必须集成库内置的 AntdUI.ScrollBar 组件,以保证样式和行为统一。

  • 公共属性 需将滚动条相关属性开放给外部代码(方便用户自定义)。

2.3 IControl.RenderRegion 用法

AntdUI.IControl 中的 GraphicsPath RenderRegion 属性对遮罩正确渲染至关重要如圆角控件上的Spin控件

  • 圆角控件需设置 RenderRegion 若控件为圆角(或非矩形),需定义 RenderRegion 以确保Spin控件或其他覆盖元素适配控件形状
    protected override GraphicsPath RenderRegion
    {
        get
        {
            return ClientRectangle.RoundPath(8 * Config.Dpi);
        }
    }
    
    • 若不设置 RenderRegionSpin等覆盖元素可能显示为矩形破坏UI一致性。

3. 贡献流程

以下演示如何通过 合并请求Pull Request简称PR 贡献代码

3.1 首先在 AntdUI 官方仓库Fork 到自己账号

点击右上角 Fork 按钮

1

3.2 选择 Fork 目标空间

默认个人,也就是自己,点击 确认 继续

2

等待 Fork 完成,完成后会自动跳转 3

3.3 在自己空间地址克隆项目

点击 克隆/下载,⚠ 注意是自己的空间地址

4

点击第一个 .git 地址复制

5

3.4 提交贡献代码到自己仓库

打开 Visual Studio 克隆刚刚复制的地址,选择目录,点击 克隆 继续

6

克隆成功后,提交需要贡献的代码

3.5 发起 PR

点击 Pull requests 选项卡,或者点击Pull Request跳转提交PR页面

7

点击 新建 Pull Request

8

大功告成

提交内容调整核实后,点击 创建 Pull Request

9

收到后,我会尽快审核,🧙 生活愉快


感谢您为AntdUI的改进提供帮助——您的贡献让这个项目变得更好🚀