KumikoUI Updates - Action Buttons, Per-Column Edit Triggers, and Custom Fonts

KumikoUI Updates - Action Buttons, Per-Column Edit Triggers, and Custom Fonts

Table of Contents

Background

A couple of months ago I introduced KumikoUI, the canvas-drawn DataGrid for .NET MAUI. Since then it has been seeing real use, and the past week brought three releases that fill in feature gaps I kept hitting in actual projects. Quick recap of what shipped in the last few releases.

Library

NuGet

Source Code

GitHub

Action Buttons in DataGrid Columns (v0.1.8)

The first release adds an action button column type. The new DrawnActionButtons element and ActionButtonsCellRenderer let you place clickable buttons directly in a row, wired up to commands or navigation. Tapping a button gets immediate touch response without the indirection of a row tap and a separate command pipeline.

Common cases this covers without extra plumbing: edit and delete buttons on each row, an inline approve and reject pair, or a single details button that pushes to a follow-up screen. Because everything is drawn on the canvas, the buttons match the rest of the grid visually and stay consistent across platforms.

Per-Column Edit Triggers (v0.1.9)

KumikoUI already had grid-level edit triggers, where the entire grid provided what initiates a cell edit (single tap, double tap, focus, and so on). That falls apart the moment you have a real-world data set where some columns should edit on a single tap and others should require a double tap, or where a column should not be editable at all even though the grid is.

This release introduces an EditTriggers property at the column level that overrides the grid default. You set it once per column where the behavior should differ, and the rest fall back to whatever the grid defines. The sample app has been updated to demonstrate a few different combinations side by side so you can see how the triggers compose.

SkiaFontRegistrar for CJK and Icon Fonts (v0.1.10)

This one came out of an Android rendering issue. On Android, SKFontManager.Default does not expose CJK typefaces or icon fonts, so anything that fell through to SKTypeface.FromFamilyName() got the default Latin typeface back. Japanese column headers rendered as garbled boxes. Material Icons code points rendered as nothing useful.

The fix is a new SkiaFontRegistrar static class in KumikoUI.SkiaSharp. It is a thread-safe registry that bypasses the system font manager for named families. You register a typeface once at startup, either by passing an SKTypeface you own or by handing in a stream the registrar takes ownership of. From that point on, SkiaDrawingContext.GetOrCreateTypeface checks the registrar before asking the platform.

Registering a font from your MAUI app’s Resources/Raw/ folder looks like this:

// MauiProgram.cs
using var stream = await FileSystem.OpenAppPackageFileAsync("NotoSansJP-Regular.ttf");
SkiaFontRegistrar.RegisterTypefaceFromStream("NotoSansJP", stream);

Then point the grid style at the registered family name:

style.HeaderFont = new GridFont("NotoSansJP", 14, bold: true);
style.CellFont   = new GridFont("NotoSansJP", 13);

Icon fonts work the same way. Register the font under a name, set GridFont.Family to that name, and use the Unicode code point string as the cell value. The sample app picked up a new Custom Fonts tab that shows both Japanese column headers and a Material Icons cell renderer, so the wiring is there to copy from.

Wrapping Up

If you are already using KumikoUI, update to v0.1.10 to pick up all three changes. If you have not tried it yet, the NuGet packages and the sample app are the fastest way in.

As always, bug reports and feature requests through GitHub issues are the most useful thing you can send my way. The more real projects this gets used in, the better it gets.

Related Posts

KumikoUI - A Free, Open-Source DataGrid for MAUI

KumikoUI - A Free, Open-Source DataGrid for MAUI

Background I have been poking at some version of a canvas-drawn DataGrid for .NET for years. Multiple attempts, different architectures, never quite getting all the pieces to land at once. The feature set I wanted kept outpacing what I was able to finish.

Read More
VConSharp - Virtual Conversations for .NET

VConSharp - Virtual Conversations for .NET

VConSharp - Virtual Conversations for .NET What Even Is a vCon Before diving into the library, you need to understand what a vCon actually is. Think of it like a PDF, but instead of holding a document, it holds a conversation. Any conversation. Phone calls, chat messages, video conferences, emails. The format does not care about the source.

Read More
XAML in 2026: Time to Move On

XAML in 2026: Time to Move On

XAML in 2026: Time to Move On The Uncomfortable Truth I have been working with XAML since the early days of WPF. It has been the standard way to build UIs in the Microsoft ecosystem for nearly two decades. But here we are in 2026, and I think it is time to have an honest conversation about whether XAML still makes sense for new .NET MAUI projects.

Read More