CodeWF.Markdown.Themes 12.0.3.16

dotnet add package CodeWF.Markdown.Themes --version 12.0.3.16
                    
NuGet\Install-Package CodeWF.Markdown.Themes -Version 12.0.3.16
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CodeWF.Markdown.Themes" Version="12.0.3.16" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CodeWF.Markdown.Themes" Version="12.0.3.16" />
                    
Directory.Packages.props
<PackageReference Include="CodeWF.Markdown.Themes" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CodeWF.Markdown.Themes --version 12.0.3.16
                    
#r "nuget: CodeWF.Markdown.Themes, 12.0.3.16"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CodeWF.Markdown.Themes@12.0.3.16
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CodeWF.Markdown.Themes&version=12.0.3.16
                    
Install as a Cake Addin
#tool nuget:?package=CodeWF.Markdown.Themes&version=12.0.3.16
                    
Install as a Cake Tool

CodeWF.Markdown

Avalonia Markdown viewer controls, typography themes, and a runnable sample app split from CodeWF.AvaloniaControls into a standalone repository.

简体中文 | English

Changelog: CHANGELOG.md

Package NuGet Downloads
CodeWF.Markdown NuGet NuGet
CodeWF.Markdown.Themes NuGet NuGet

Packages

  • CodeWF.Markdown: full Markdown viewer with common Markdown elements, code highlighting, image preview, SVG/image support, math rendering hooks, localization, and incremental rendering.
  • CodeWF.Markdown.Themes: default templates and typography themes for CodeWF.Markdown.

Image Loading And Export Helpers

CodeWF.Markdown also exposes shared Markdown image utilities for host applications that export Markdown to offline files. MarkdownImageSourceLoader loads data:image URIs, local paths, file:// URIs, and HTTP(S) images, resolving relative paths against the current Markdown document path and trying URL-decoded filenames. MarkdownImageRasterizer converts loaded SVG, GIF first frames, and other bitmap formats to static PNG bytes so PDF, PNG, Word, or other export pipelines can embed images without reimplementing viewer-specific loading logic.

MarkdownDocumentExporter provides one-call export helpers for host applications:

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");

The built-in PNG/PDF/Word exporters reuse the shared image loader and rasterizer. Word output embeds image parts under word/media. PDF output now writes selectable text, includes Unicode text maps for copy/paste, and embeds Markdown images as PDF image content instead of flattening the whole page into one bitmap.

Rich HTML Clipboard Helpers

MarkdownHtmlClipboard and MarkdownHtmlClipboardExtensions create reusable rich HTML clipboard payloads for host applications that copy Markdown-rendered HTML into web editors such as WeChat Official Account, Zhihu, and Juejin. They write text/plain, text/html, macOS public.html, and Windows HTML Format data; the Windows payload is UTF-8 CF_HTML bytes with correct fragment offsets, so Chromium-based editors can paste styled HTML instead of showing the raw markup as plain text.

The simple Avalonia clipboard path only needs the Markdown text, active typography theme, and target platform:

await clipboard.TrySetMarkdownHtmlAsync(
    markdown,
    MarkdownTypographyThemes.Simple,
    "wechat",
    MarkdownTypographySizes.Small);

await clipboard.SetMarkdownHtmlAsync(
    markdown,
    MarkdownExportStyle.Resolve("Simple", "Small"),
    CopyKind.Zhihu);

Built-in targets are CopyKind.Wechat, CopyKind.Zhihu, and CopyKind.Juejin; string target names are resolved by MarkdownSocialCopyProfiles so host applications can keep lightweight menu command parameters. Markdown string copy resolves relative images from the current working directory. File-based content creation can resolve relative images from the Markdown file path. Applications can pass a custom MarkdownSocialCopyProfile for new publishing targets while still reusing the same CF_HTML clipboard writer.

For paste workflows, MarkdownHtmlClipboard.Html2Markdown(htmlContent) converts HTML copied from a web page into Markdown, including headings, paragraphs, links, images, lists, block quotes, code blocks, and tables. The converter is built into CodeWF.Markdown and does not add a third-party package dependency.

var markdown = MarkdownHtmlClipboard.Html2Markdown(htmlContent);

Installation

Install-Package CodeWF.Markdown
Install-Package CodeWF.Markdown.Themes

Usage

Add the theme package in App.axaml:

<Application
    xmlns="https://github.com/avaloniaui"
    xmlns:markdown="https://codewf.com">
    <Application.Styles>
        <FluentTheme />
        <markdown:MarkdownThemes />
    </Application.Styles>
</Application>

Set TypographyTheme and TypographySize on MarkdownThemes for app defaults, or on MarkdownViewer for per-viewer overrides. Omitted values default to Basic and 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>

The sample app shows live editing, file loading, theme switching, and incremental rendering stress scenarios.

Custom Typography Themes

Built-in theme names stay as string constants such as MarkdownTypographyThemes.Simple instead of an enum because host applications can register their own theme keys. A custom theme can reuse the same resource keys used by the built-in themes:

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");

The simplest export and social-copy APIs resolve built-in theme names through MarkdownExportStyle.Resolve, including typography size. Applications that need complete control can still build and pass a MarkdownExportStyle directly. Applications that keep custom XAML resource dictionaries can register () => new MyCompanyMarkdownResources() and create an export style with MarkdownThemes.CreateExportStyle(...) when they want preview, PNG/PDF/Word export, and social-copy HTML styling to share the same custom resource dictionary.

Repository Layout

  • src/CodeWF.Markdown: full Markdown viewer package
  • src/CodeWF.Markdown.Themes: full viewer templates and typography themes
  • src/CodeWF.Markdown.Sample: full viewer sample app
  • tests/CodeWF.Markdown.Tests: rendering and diff service tests
  • CodeWF.Markdown.slnx: solution view for Markdown projects, sample, and tests

Build

dotnet restore CodeWF.Markdown.slnx
dotnet build CodeWF.Markdown.slnx --no-restore

To create NuGet packages:

.\pack.bat

To publish the sample app for win-x64 and linux-x64:

.\publish_Markdown.bat

License

MIT. See LICENSE.

Third-Party Open Source Audit

Checked on 2026-05-23 with NuGet metadata, restored project.assets.json, and upstream source/license links. MIT / Apache-2.0 / BSD are preferred.

Remediation:

  • Replaced Semi.Avalonia.AvaloniaEdit with the open-source Avalonia.AvaloniaEdit package.
  • Removed AvaloniaEditSemiTheme from the full sample app; editor rendering now relies on the open AvaloniaEdit control and the repository's own Markdown themes.
Package License Source Status
AnimatedImage.Avalonia Apache-2.0 https://github.com/whistyun/AnimatedImage Approved
Avalonia / Avalonia.Desktop / Avalonia.Fonts.Inter / Avalonia.Themes.Fluent MIT https://github.com/AvaloniaUI/Avalonia Approved
Avalonia.AvaloniaEdit MIT https://github.com/AvaloniaUI/AvaloniaEdit Approved
CommunityToolkit.Mvvm MIT https://github.com/CommunityToolkit/dotnet Approved
Lang.Avalonia.Json MIT https://github.com/dotnet9/Lang.Avalonia Approved
Markdig BSD-2-Clause https://github.com/xoofx/markdig Approved
Semi.Avalonia MIT https://github.com/irihitech/Semi.Avalonia Approved, only the open core package is used by the sample
Svg.Controls.Skia.Avalonia / Svg.Skia MIT https://github.com/wieslawsoltes/Svg.Skia Approved
Sylinko.CSharpMath.Avalonia MIT https://github.com/Sylinko/CSharpMath.Avalonia Approved
TextMateSharp / TextMateSharp.Grammars MIT https://github.com/danipen/TextMateSharp Approved
VC-LTL EPL-2.0 https://github.com/Chuyu-Team/VC-LTL5 Source-open; approved under the source-traceable non-preferred license rule
YY-Thunks MIT https://github.com/Chuyu-Team/YY-Thunks Approved
Microsoft.NET.Test.Sdk MIT https://github.com/microsoft/vstest Approved, test-only
xunit / xunit.runner.visualstudio Apache-2.0 https://github.com/xunit/xunit Approved, test-only

Transitive dependencies from Avalonia, AnimatedImage, SkiaSharp, Svg.Skia, CSharpMath, and TextMateSharp were checked and are source-open under MIT/BSD-style licenses. Active project files no longer contain Semi.Avalonia.AvaloniaEdit.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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.  net11.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
12.0.3.16 33 5/27/2026
12.0.3.14 48 5/27/2026
12.0.3.13 62 5/25/2026
12.0.3.12 49 5/25/2026
12.0.3.11 51 5/25/2026
12.0.3.9 50 5/25/2026
12.0.3.8 50 5/25/2026
12.0.3.7 47 5/24/2026
12.0.3.6 56 5/23/2026
12.0.3.3 56 5/22/2026
12.0.3.2 95 5/20/2026
12.0.3.1 97 5/16/2026
12.0.2.6 95 5/12/2026
12.0.2.5 105 5/8/2026
12.0.2.3 93 5/5/2026
12.0.2.1 92 5/5/2026
12.0.2 91 5/4/2026