CodeWF.Markdown.Lite.Themes
14.0.3
dotnet add package CodeWF.Markdown.Lite.Themes --version 14.0.3
NuGet\Install-Package CodeWF.Markdown.Lite.Themes -Version 14.0.3
<PackageReference Include="CodeWF.Markdown.Lite.Themes" Version="14.0.3" />
<PackageVersion Include="CodeWF.Markdown.Lite.Themes" Version="14.0.3" />
<PackageReference Include="CodeWF.Markdown.Lite.Themes" />
paket add CodeWF.Markdown.Lite.Themes --version 14.0.3
#r "nuget: CodeWF.Markdown.Lite.Themes, 14.0.3"
#:package CodeWF.Markdown.Lite.Themes@14.0.3
#addin nuget:?package=CodeWF.Markdown.Lite.Themes&version=14.0.3
#tool nuget:?package=CodeWF.Markdown.Lite.Themes&version=14.0.3
CodeWF.Markdown
基于 Avalonia 12 的 Markdown 渲染控件、排版主题和可运行示例。该仓库从 CodeWF.AvaloniaControls 拆分而来,只保留 Markdown 相关代码与文档。
更新日志:UpdateLog.md
| 名称 | NuGet | 下载量 |
| --- | --- | --- |
| CodeWF.Markdown.Lite | |
|
| CodeWF.Markdown |
|
|
| CodeWF.Markdown.Lite.Themes |
|
|
| CodeWF.Markdown.Themes |
|
|
仓库规范
- 当前版本:
14.0.3,版本号统一维护在根目录Directory.Build.props的<Version>节点。 - 14.0.0 起所有 NuGet 包只支持
net10.0(Mermaid 依赖仅提供 net10 资产);Demo 和测试同样使用net10.0,构建与发布采用 .NET 10 SDK。 - 根目录
logo.svg、logo.png、logo.ico是唯一图标源,子工程只通过 MSBuildLink引用,不维护图标副本。 - 运行时帮助、Markdown 示例、内置备忘录、设计说明等业务文档按功能保留;仓库级入口文档使用根目录
README.md和UpdateLog.md。
包线说明(14.0.0 起,四个包)
按「是否引入第三方能力依赖」切分,基础与完整共用同一份渲染实现,不存在两套渲染代码:
| 包 | 依赖 | 能力 |
|---|---|---|
CodeWF.Markdown.Lite |
Avalonia、Markdig、CodeWF.AvaloniaControls | 唯一一份渲染引擎:标题/段落/列表/引用/表格/链接/代码块(单色)/图片(替代文本)/公式(原文);不含任何第三方能力依赖 |
CodeWF.Markdown |
Lite + AvaloniaEdit + TextMateSharp + Sylinko.CSharpMath.Avalonia + Mermaider + AnimatedImage.Avalonia + Svg.Skia + SkiaSharp | 能力增量:代码高亮、数学公式、Mermaid 图表、图片(GIF/SVG/预览窗)、PNG/PDF/Word/公众号 HTML 导出;并含编辑器控件(源码编辑器 MarkdownEditorView + 单栏实时编辑 MarkdownLiveEditorView) |
CodeWF.Markdown.Lite.Themes |
Lite | 控件模板 + 全部排版令牌 + 18 套排版主题 |
CodeWF.Markdown.Themes |
Lite.Themes + Markdown | 完整包的样式入口(MarkdownFullThemes):在 Lite.Themes 之上叠加图片能力控件外观 |
安装组合
- 基础能力:只装
CodeWF.Markdown.Lite.Themes(自动引入 Lite)→ 18 套排版主题可用,代码块单色、公式显示原文、图片显示替代文本。 - 完整能力:只装
CodeWF.Markdown.Themes(自动引入 Markdown + Lite.Themes + Lite)→ 全能力 + 编辑器。 - 编辑器随完整包提供,无需单独安装。
<Application.Styles>
<FluentTheme />
<markdownThemes:MarkdownFullThemes TypographyTheme="Simple" />
</Application.Styles>
// 注册完整包能力(命名空间与 13.x 完全一致,调用代码零改动)
CodeWF.Markdown.Highlighting.CodeWFMarkdownHighlightingExtensions.UseHighlighting();
CodeWF.Markdown.Images.CodeWFMarkdownImagesExtensions.UseImages();
CodeWF.Markdown.MathRendering.CodeWFMarkdownMathExtensions.UseMath();
CodeWF.Markdown.Mermaid.CodeWFMarkdownMermaidExtensions.EnsureRegistered();
13.x → 14.0.0 迁移
| 13.x | 14.0.0 |
|---|---|
CodeWF.Markdown(核心渲染) |
CodeWF.Markdown.Lite(仅基础渲染时)或 CodeWF.Markdown(要完整能力时) |
CodeWF.Markdown.Highlighting / .Math / .Mermaid / .Images / .Export 五个可选能力包 |
合并为 CodeWF.Markdown 一个包 |
CodeWF.Markdown.Themes |
基础用 CodeWF.Markdown.Lite.Themes,完整用 CodeWF.Markdown.Themes |
CodeWF.Markdown.Editor(13.2.0 新增) |
并入 CodeWF.Markdown |
MarkdownThemes(样式入口) |
完整包改用 MarkdownFullThemes(MarkdownThemes 仍在 Lite.Themes) |
能力扩展方法调用(UseHighlighting() 等) |
不变(命名空间与扩展方法名全部保留) |
目标框架 net8.0;net10.0;net11.0 |
统一 net10.0,net8 消费者需先升级 |
使用 Mermaid 能力包
// NuGet: CodeWF.Markdown(完整包)
CodeWF.Markdown.Mermaid.CodeWFMarkdownMermaidExtensions.EnsureRegistered();
// 或实例扩展:viewer.UseMermaid();
图片加载与导出辅助能力
CodeWF.Markdown 也提供可复用的 Markdown 图片工具,方便宿主应用把 Markdown 导出为可离线分发的文件。MarkdownImageSourceLoader 支持加载 data:image、本地路径、file:// 和 HTTP(S) 图片,相对路径会按当前 Markdown 文档路径解析,并尝试 URL 解码后的文件名。MarkdownImageRasterizer 可把已加载的 SVG、GIF 首帧和其他位图格式转换为静态 PNG 字节,PDF、PNG、Word 或其他导出链路可以直接嵌入图片,不必重复实现预览控件里的图片加载逻辑。
MarkdownDocumentExporter 为宿主应用提供一行调用的 PNG/PDF/Word 导出能力:
MarkdownDocumentExporter.ExportMarkdown(
markdown,
ExportKind.Pdf,
"Simple",
"article.pdf");
MarkdownDocumentExporter.ExportFile(
@"C:\docs\article.md",
ExportKind.Word,
MarkdownTypographyThemes.Simple,
"article.docx");
var document = new MarkdownExportDocument(markdown, filePath, fileName);
MarkdownDocumentExporter.Export(document, ExportKind.Png, "article.png");
内置 PNG/PDF/Word 导出器会复用公共图片加载与栅格化能力。Word 输出会把图片写入 word/media;PDF 输出会写入可选择文本,包含用于复制粘贴的 Unicode 文本映射,并把 Markdown 图片作为 PDF 图片内容嵌入,不再把整页压平成单张位图。
富 HTML 剪贴板辅助能力
MarkdownHtmlClipboard 和 MarkdownHtmlClipboardExtensions 为宿主应用提供可复用的富 HTML 剪贴板载荷,适合把 Markdown 渲染后的 HTML 复制到微信公众号、知乎、稀土掘金等网页编辑器。它会同时写入 text/plain、text/html、macOS public.html 和 Windows HTML Format;Windows 载荷使用带正确片段偏移的 UTF-8 CF_HTML 字节,避免 Chromium 系编辑器把带样式 HTML 当作普通文本显示。
Avalonia 剪贴板扩展的简单调用只需要当前 Markdown、排版主题和目标平台:
await clipboard.TrySetMarkdownHtmlAsync(
markdown,
MarkdownTypographyThemes.Simple,
"wechat",
MarkdownTypographySizes.Small);
await clipboard.SetMarkdownHtmlAsync(
markdown,
MarkdownExportStyle.Resolve("Simple", "Small"),
CopyKind.Zhihu);
内置目标包括 CopyKind.Wechat、CopyKind.Zhihu 和 CopyKind.Juejin;字符串目标名由 MarkdownSocialCopyProfiles 解析,方便宿主应用直接复用菜单命令参数。基于 Markdown 字符串复制时,相对图片按当前工作目录解析;基于 Markdown 文件生成内容时,相对图片可按文件路径解析。后续新增发布平台时,应用可传入自定义 MarkdownSocialCopyProfile,继续复用同一套 CF_HTML 剪贴板写入能力。
粘贴方向可使用 MarkdownHtmlClipboard.Html2Markdown(htmlContent),把从网页复制到剪贴板的 HTML 转为 Markdown,覆盖标题、段落、链接、图片、列表、引用、代码块和表格等常见结构。转换器内置在 CodeWF.Markdown 中,不额外引入第三方包。
var markdown = MarkdownHtmlClipboard.Html2Markdown(htmlContent);
安装
Install-Package CodeWF.Markdown
Install-Package CodeWF.Markdown.Themes
使用方式
在 App.axaml 引入主题包:
<Application
xmlns="https://github.com/avaloniaui"
xmlns:markdown="https://codewf.com">
<Application.Styles>
<FluentTheme />
<markdown:MarkdownThemes />
</Application.Styles>
</Application>
可以在 MarkdownThemes 上设置全局默认,也可以在 MarkdownViewer 上设置单个 Viewer 覆盖。TypographyTheme 和 TypographySize 可不填,默认是 Basic 和 Normal。
<UserControl
xmlns="https://github.com/avaloniaui"
xmlns:md="https://codewf.com">
<ScrollViewer
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto">
<md:MarkdownViewer
Markdown="{Binding Markdown}"
TypographyTheme="Simple"
TypographySize="Small" />
</ScrollViewer>
</UserControl>
示例工程包含实时编辑、样例文档加载、排版主题切换和增量渲染压力测试。
扩展个性化排版主题
内置主题名继续使用 MarkdownTypographyThemes.Simple 这样的字符串常量,而不是改成 enum,是为了让宿主应用可以注册自己的主题 Key。自定义主题复用内置主题同一套资源 Key:
MarkdownTypographyThemeRegistry.Register(
"MyCompanyBlue",
() => new ResourceDictionary
{
[MarkdownStyleKeys.TextBrushResource] = new SolidColorBrush(Color.Parse("#1F2937")),
[MarkdownStyleKeys.MutedTextBrushResource] = new SolidColorBrush(Color.Parse("#64748B")),
[MarkdownStyleKeys.AccentBrushResource] = new SolidColorBrush(Color.Parse("#0E88EB")),
[MarkdownStyleKeys.BorderBrushResource] = new SolidColorBrush(Color.Parse("#BFDBFE")),
[MarkdownStyleKeys.ParagraphFontSizeResource] = 16d,
[MarkdownStyleKeys.ParagraphLineHeightResource] = 28d,
[MarkdownStyleKeys.Heading1FontSizeResource] = 32d,
[MarkdownStyleKeys.CodeBlockFontSizeResource] = 13d
});
MarkdownThemes.OverrideTypographyResources(
Application.Current!,
"MyCompanyBlue",
MarkdownTypographySizes.Normal);
var exportStyle = MarkdownThemes.CreateExportStyle("MyCompanyBlue");
MarkdownDocumentExporter.ExportMarkdown(markdown, ExportKind.Pdf, exportStyle, "article.pdf");
最简单的导出和自媒体复制 API 会通过 MarkdownExportStyle.Resolve 解析内置主题名和排版尺寸。如果应用需要完全接管导出外观,也可以直接构造并传入 MarkdownExportStyle。如果应用已有自己的 XAML 资源字典,可以注册 () => new MyCompanyMarkdownResources(),并在需要共享自定义资源时通过 MarkdownThemes.CreateExportStyle(...) 生成导出样式,让预览、PNG/PDF/Word 导出和自媒体复制 HTML 都从同一套排版资源解析样式。
仓库结构
src/CodeWF.Markdown:完整 MarkdownViewer 类库src/CodeWF.Markdown.Themes:完整版本控件模板和排版主题src/CodeWF.Markdown.Sample:完整版本示例工程tests/CodeWF.Markdown.Tests:渲染和差异服务测试CodeWF.Markdown.slnx:Markdown 类库、示例和测试的解决方案视图
构建
dotnet restore CodeWF.Markdown.slnx
dotnet build CodeWF.Markdown.slnx --no-restore
打包 NuGet:
.\pack.bat
发布示例工程到 win-x64 和 linux-x64:
.\publish_Markdown.bat
CI/CD:自动发布 NuGet 包
推送 v* 标签(例如 v13.0.0.1)会触发 .github/workflows/publish-nuget.yml,一次发布七个包:CodeWF.Markdown、CodeWF.Markdown.Themes、CodeWF.Markdown.Highlighting、CodeWF.Markdown.Math、CodeWF.Markdown.Mermaid、CodeWF.Markdown.Images、CodeWF.Markdown.Export(含 snupkg 符号包),完成后自动创建 GitHub Release(同时由 publish-demo 工作流产出五平台 Demo 安装包)。
包版本号以 Directory.Build.props 的 <Version> 为准,打标签前先升版本——nuget.org 拒绝重复的版本号;标签与 <Version> 不一致时工作流仅告警不阻断。认证使用 NuGet Trusted Publishing:工作流通过 nuget/login@v1 以 OIDC 令牌换取一次性发布凭据,仓库不保存任何 secret。nuget.org 侧的 API key 需绑定本仓库与工作流文件名 publish-nuget.yml(Scopes 勾选 Push,Glob 建议收窄为 CodeWF.*);这类 key 创建后 7 天内需成功发布一次才会转永久有效。
手工发布步骤:
# 1. 升版本:修改 Directory.Build.props 的 <Version>(或用 UpdateAssemblyVersion.ps1)并提交
# 2. 打标签并推送,触发发布
git tag -a v13.0.0.1 -m "CodeWF.Markdown v13.0.0.1"
git push origin v13.0.0.1
# 3. 在 GitHub Actions 观察 publish-nuget 运行,完成后到 nuget.org 核对七个包的新版本
许可证
MIT,详见 LICENSE。
第三方开源组件审计
检查时间:2026-05-23。检查范围包括 NuGet 元数据、恢复后的 project.assets.json、NuGet.org 信息以及上游源码/许可证链接。优先接受 MIT / Apache-2.0 / BSD。
本次整改:
- 将
Semi.Avalonia.AvaloniaEdit替换为开源Avalonia.AvaloniaEdit。 - 示例工程移除
AvaloniaEditSemiTheme,编辑器渲染改为使用开源 AvaloniaEdit 控件和本仓库自己的 Markdown 主题。
| 包 | 协议 | 源码/项目地址 | 结论 |
|---|---|---|---|
AnimatedImage.Avalonia |
Apache-2.0 | https://github.com/whistyun/AnimatedImage | 通过 |
Avalonia / Avalonia.Desktop / Avalonia.Fonts.Inter / Avalonia.Themes.Fluent |
MIT | https://github.com/AvaloniaUI/Avalonia | 通过 |
Avalonia.AvaloniaEdit |
MIT | https://github.com/AvaloniaUI/AvaloniaEdit | 通过 |
CommunityToolkit.Mvvm |
MIT | https://github.com/CommunityToolkit/dotnet | 通过 |
Lang.Avalonia.Json |
MIT | https://github.com/dotnet9/Lang.Avalonia | 自研开源包 |
Markdig |
BSD-2-Clause | https://github.com/xoofx/markdig | 通过 |
Semi.Avalonia |
MIT | https://github.com/irihitech/Semi.Avalonia | 通过,仅示例使用开源主体包 |
Svg.Controls.Skia.Avalonia / Svg.Skia |
MIT | https://github.com/wieslawsoltes/Svg.Skia | 通过 |
Sylinko.CSharpMath.Avalonia |
MIT | https://github.com/Sylinko/CSharpMath.Avalonia | 通过 |
TextMateSharp / TextMateSharp.Grammars |
MIT | https://github.com/danipen/TextMateSharp | 通过 |
VC-LTL |
EPL-2.0 | https://github.com/Chuyu-Team/VC-LTL5 | 源码开放,按“非优先但可追溯”规则通过 |
YY-Thunks |
MIT | https://github.com/Chuyu-Team/YY-Thunks | 通过 |
Microsoft.NET.Test.Sdk |
MIT | https://github.com/microsoft/vstest | 测试依赖,通过 |
xunit / xunit.runner.visualstudio |
Apache-2.0 | https://github.com/xunit/xunit | 测试依赖,通过 |
传递依赖检查结论:Avalonia、AnimatedImage、SkiaSharp、Svg.Skia、CSharpMath、TextMateSharp 等链路均有公开源码,许可证为 MIT 或 BSD-style。有效项目文件中不再包含 Semi.Avalonia.AvaloniaEdit。
包版本维护约定
XML 文件统一使用两个空格缩进。Directory.Packages.props 统一承载 NuGet 中央包管理开关和包版本变量,包括 AvaloniaVersion 等共享版本属性;Directory.Build.props 仅保留项目构建、编译选项和 NuGet 元数据。仓库如引用 VC-LTL、YY-Thunks,这两个兼容旧版操作系统的特殊包必须使用最新预览版。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Avalonia (>= 12.1.3)
- CodeWF.AvaloniaControls (>= 12.3.1)
- CodeWF.Markdown.Lite (>= 14.0.3)
- Lang.Avalonia.Json (>= 12.1.2.15)
- Markdig (>= 1.4.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on CodeWF.Markdown.Lite.Themes:
| Package | Downloads |
|---|---|
|
CodeWF.Markdown.Themes
CodeWF.Markdown 完整包的样式入口:在 CodeWF.Markdown.Lite.Themes 的控件模板与 18 套排版主题之上,叠加图片能力控件外观。Styles entry point for the full CodeWF.Markdown package. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 14.0.3 | 0 | 10/8/2026 |
| 14.0.2 | 0 | 10/8/2026 |
| 12.1.2.14 | 58 | 10/3/2026 |
| 12.1.2.13 | 55 | 10/1/2026 |
| 12.1.2.12 | 157 | 10/1/2026 |
| 12.1.2.11 | 91 | 9/24/2026 |
| 12.1.2.10 | 98 | 9/23/2026 |
| 12.1.2.9 | 98 | 9/22/2026 |
| 12.1.2.2 | 102 | 9/20/2026 |
| 12.1.2.1 | 115 | 9/8/2026 |
| 12.1.1.3 | 121 | 8/13/2026 |
| 12.1.1.2 | 204 | 8/4/2026 |
| 12.1.1.1 | 126 | 7/30/2026 |
| 12.1.0.1 | 128 | 7/14/2026 |
| 12.0.5.2 | 225 | 6/24/2026 |
| 12.0.4.3 | 134 | 6/8/2026 |
| 12.0.4.1 | 148 | 6/2/2026 |
| 12.0.3.16 | 137 | 5/27/2026 |
| 12.0.3.7 | 133 | 5/24/2026 |
| 12.0.3.2 | 134 | 5/20/2026 |