Overview

Six concrete theme implementations are available, each extending BeepTheme and overriding approximately 200 token properties. Themes provide cohesive visual language: button colors, fonts, border radii, surface colors, chart palettes, and more. Each theme is composed of multiple partial class files, totaling over 120 files across all themes. The BeepThemesManager singleton manages registration, lookup, and active theme switching.

Theme Structure

Theme ClassPartial FilesPrimary AccentStyle InspirationVariants
UbuntuTheme26Orange (#E95420)Ubuntu Linux, warm warm-gray surfaces, dark sidebarLight, Dark
GNOMETheme30Blue (#3584e4)GNOME Adwaita, flat panels, 8px corners, gray/blueLight, Dark
CyberpunkTheme30Magenta (#FF00FF)Neon-drenched tech noir, near-black, glow effectsDark only
CandyTheme1 (single file)Pink (#FF6B9D)Soft pastels, 12px+ rounded corners, bubble shapesLight
ZenTheme1 (single file)Sage Green (#7C9A6E)Earth tones, serif-like typography, minimal chromeLight
CyberpunkNeonTheme5Hot Magenta (#FF1493)Brighter cyberpunk variant, electric cyan, neon greenDark only
public abstract class BeepTheme : IBeepTheme
{
    public string ThemeName { get; set; }
    public Color BackgroundColor { get; set; }
    public Color ForegroundColor { get; set; }
    // ... ~200 overridable token properties
}
// Each concrete theme overrides the tokens it changes from default

UbuntuTheme

Inspired by Ubuntu Linux's Yaru theme. Uses a warm palette with orange accents, dark sidebar, and light content surfaces. Two variants: Light (white surfaces, dark sidebar) and Dark (charcoal surfaces, dark sidebar). Composed of 26 partial files covering all control types.

Token CategoryLight ValueDark Value
Primary accent#E95420 (Ubuntu orange)#E95420 (same accent)
Background#F5F5F5 (warm light gray)#1E1E1E (near black)
Surface color#FFFFFF (white)#2D2D2D (dark gray)
Sidebar background#2C001E (deep aubergine)#1A0012 (darker aubergine)
Sidebar text#FFFFFF (white)#E0E0E0 (light gray)
Button background#E95420 (orange)#E95420
Button hover#D44715 (darker orange)#CC491A
Button text#FFFFFF#FFFFFF
Border radius6px6px
Font (default)Ubuntu, 9ptUbuntu, 9pt
Font (title)Ubuntu, Bold, 12ptUbuntu, Bold, 12pt
Grid header#E95420 / #FFFFFF text#E95420 / #FFFFFF text
Grid cell#FFFFFF / #333333 text#2D2D2D / #E0E0E0 text
Grid selection#FFD4BE (light orange tint)#5C2D1A (dark orange tint)
Chart paletteOrange, Teal, Purple, Gold, Blue, Green, Red, GrayOrange, Teal, Purple, Gold, Blue, Green, Red, Gray

The 26 partial files for UbuntuTheme mirror the BeepTheme structure: Core, Button, TextBox, ComboBox, CheckBox, RadioButton, Grid, Chart, Calendar, Tab, Stepper, Tree, Menu, Navigation, Wizard, Card, Dialog, Login, Dashboard, StatusBar, ToolTip, Gradient, ColorPalette, FontAndTypography, ScrollBar, ProgressBar.

GNOMETheme

Follows GNOME's Adwaita design language. Flat surfaces, 8px rounded corners, gray and blue as primary tones. Clean, modern, and consistent with GNOME desktop applications. Supports light and dark variants through the same partial file override structure.

Token CategoryLight ValueDark Value
Primary accent#3584e4 (Adwaita blue)#3584e4
Background#FAFAFA (near-white)#242424 (dark gray)
Surface color#FFFFFF#303030
Sidebar background#EBEBEB (light gray)#1E1E1E
Sidebar text#2E3436 (dark gray)#EEEEEE
Button background#E0E0E0 (light gray)#3D3D3D
Button hover#D0D0D0 (darker hover)#4D4D4D (lighter hover)
Button primary accent#3584e4#3584e4
Button text#2E3436#EEEEEE
Border radius8px8px
Font (default)Cantarell, 10ptCantarell, 10pt
Font (title)Cantarell, Bold, 11ptCantarell, Bold, 11pt
Grid header#E8E8E8 / #2E3436 text#323232 / #EEEEEE text
Grid cell#FFFFFF / #2E3436 text#303030 / #EEEEEE text
Grid selection#D0E4FA (light blue tint)#1A3A5C (dark blue tint)
Chart paletteBlue, Green, Orange, Purple, Teal, Red, Yellow, GrayBlue, Green, Orange, Purple, Teal, Red, Yellow, Gray

CyberpunkTheme

Neon-drenched dark theme inspired by cyberpunk aesthetics. Magenta (#FF00FF) primary accent with cyan (#00FFFF) secondary. Near-black backgrounds (#0D0D0D, #1A1A1A), glow effects on hover states, and high-contrast neon text. Dark-only; no light variant.

Token CategoryValue
Primary accent#FF00FF (magenta)
Secondary accent#00FFFF (cyan)
Background#0D0D0D (void black)
Surface color#1A1A1A (dark gray)
Sidebar background#0D0D0D
Sidebar text#FF00FF (magenta, active items)
Button background#FF00FF
Button hover#FF33FF (lighter magenta) + glow effect (10px blur, magenta)
Button text#000000 (black on magenta)
Button border#FF00FF, 2px, glow neon
Border radius4px (sharp edges)
Font (default)Consolas, 9pt (monospace)
Font (title)Consolas, Bold, 14pt, cyan (#00FFFF)
Grid header#FF00FF / #000000 text
Grid cell#1A1A1A / #00FFFF (cyan text)
Grid selection#FF00FF at 30% opacity / #FFFFFF text
Grid alternating row#141414
Chart palette#FF00FF, #00FFFF, #FF6600, #00FF00, #FFFF00, #FF0080, #0080FF, #FF8000
Glow effectEnabled on hover for buttons, tabs, selection; 8-12px blur
Status bar#FF00FF / #000000 text
public partial class CyberpunkTheme : BeepTheme
{
    public CyberpunkTheme()
    {
        ThemeName = "Cyberpunk";
        BackgroundColor = Color.FromArgb(13, 13, 13);
        ForegroundColor = Color.FromArgb(0, 255, 255); // cyan

        // Buttons
        ButtonBackColor = Color.FromArgb(255, 0, 255);       // magenta
        ButtonForeColor = Color.Black;
        ButtonBorderColor = Color.FromArgb(255, 0, 255);
        ButtonHoverColor = Color.FromArgb(255, 51, 255);     // lighter magenta
        ButtonPressedColor = Color.FromArgb(200, 0, 200);

        // Glow
        EnableGlowEffects = true;
        GlowColor = Color.FromArgb(255, 0, 255);
        GlowBlurRadius = 10;

        // Font
        DefaultFont = new Font("Consolas", 9f, FontStyle.Regular);
        TitleFont = new Font("Consolas", 14f, FontStyle.Bold);

        // Border
        BorderRadius = 4;
    }
}

CandyTheme

Soft pastel palette with large rounded corners (12px+) and playful bubble shapes. Single-file theme targeting light backgrounds. Pinks, lavenders, mint greens, and sky blues dominate. Rounded buttons, pill-shaped badges, and generous padding create a friendly, approachable UI.

Token CategoryValue
Primary accent#FF6B9D (candy pink)
Secondary accent#C084FC (lavender purple)
Background#FFF5F9 (pale pink-white)
Surface color#FFFFFF with #FFF0F5 tint
Sidebar background#FF6B9D (solid pink)
Sidebar text#FFFFFF
Button background#FF6B9D (pink)
Button hover#FF85B3 (lighter pink)
Button text#FFFFFF
Button borderNone (flat, rounded)
Border radius14px (very rounded)
Font (default)Segoe UI, 9.5pt
Font (title)Segoe UI, Bold, 12pt
Grid header#FFB6D9 / #4A2C3A text
Grid cell#FFFFFF / #4A2C3A text
Grid selection#FFE0EC (pale pink)
Chart palette#FF6B9D, #C084FC, #6BCB9D, #84C8FC, #FCD484, #FC8B84, #B4EBCA, #D4B8FC
public class CandyTheme : BeepTheme
{
    public CandyTheme()
    {
        ThemeName = "Candy";
        BackgroundColor = Color.FromArgb(255, 245, 249);
        ForegroundColor = Color.FromArgb(74, 44, 58);
        BorderRadius = 14;
        Opacity = 1.0f;

        ButtonBackColor = Color.FromArgb(255, 107, 157);
        ButtonForeColor = Color.White;
        ButtonBorderColor = Color.Transparent;
        ButtonHoverColor = Color.FromArgb(255, 133, 179);

        DefaultFont = new Font("Segoe UI", 9.5f);
        TitleFont = new Font("Segoe UI", 12f, FontStyle.Bold);
    }
}

ZenTheme

Earth-tone palette inspired by Japanese zen aesthetics and nature. Sage greens, warm beiges, terracotta accents, and soft browns. Serif-like typography feel with Georgia or similar fonts. Minimal chrome — borders are subtle, drop shadows are light, and the overall feel is calm and deliberate.

Token CategoryValue
Primary accent#7C9A6E (sage green)
Secondary accent#C4A882 (warm sand/beige)
Background#F5F0E8 (cream/warm white)
Surface color#FFFFFF
Sidebar background#4A5D3F (dark olive)
Sidebar text#E8DCC8 (parchment)
Button background#7C9A6E
Button hover#8DB07D (lighter sage)
Button text#FFFFFF
Button border#6B8A5E, 1px
Border radius4px (subtle, clean)
Font (default)Georgia, 10pt (serif-like digital)
Font (title)Georgia, Bold, 13pt
Grid header#7C9A6E / #FFFFFF text
Grid cell#FFFFFF / #4A3B2F text
Grid selection#D4E8CC (pale sage)
Chart palette#7C9A6E, #C4A882, #D4956A, #6A9AAD, #AD8C6A, #8AAD7E, #A8C4A0, #D4C4A8
public class ZenTheme : BeepTheme
{
    public ZenTheme()
    {
        ThemeName = "Zen";
        BackgroundColor = Color.FromArgb(245, 240, 232);
        ForegroundColor = Color.FromArgb(74, 59, 47);
        BorderRadius = 4;
        Opacity = 0.98f;

        ButtonBackColor = Color.FromArgb(124, 154, 110);
        ButtonForeColor = Color.White;
        ButtonBorderColor = Color.FromArgb(107, 138, 94);
        ButtonHoverColor = Color.FromArgb(141, 176, 125);

        DefaultFont = new Font("Georgia", 10f);
        TitleFont = new Font("Georgia", 13f, FontStyle.Bold);
    }
}

CyberpunkNeonTheme

A brighter, more saturated variant of CyberpunkTheme. Hot magenta (#FF1493), electric cyan (#00E5FF), and neon green (#39FF14) accents. 5 partial files for the core overrides (Core, Button, Menu, Grid, Gradient). Designed for applications that want the cyberpunk aesthetic but with higher luminance and more aggressive color contrast.

Token CategoryValue
Primary accent#FF1493 (deep pink / hot magenta)
Secondary accent#00E5FF (electric cyan)
Tertiary accent#39FF14 (neon green)
Background#0A0A0A (deeper black than Cyberpunk)
Surface color#151515
Button background#FF1493
Button hover#FF3399 + intense glow (16px blur)
Button text#FFFFFF
Grid text#00E5FF (cyan)
Grid selection#FF1493, 40% opacity
Border radius0px (razor sharp, brutal edges)
Font (default)Consolas, 9.5pt
Font (title)Consolas, Bold, 16pt, #00E5FF

BeepThemesManager

The BeepThemesManager is a singleton that manages all theme registration, lookup, and active theme switching. Controls query it for the current active theme during painting. When the theme changes, all controls subscribing to the ThemeChanged event invalidate and repaint themselves.

public sealed class BeepThemesManager
{
    private static readonly Lazy<BeepThemesManager> _instance =
        new Lazy<BeepThemesManager>(() => new BeepThemesManager());

    public static BeepThemesManager Instance => _instance.Value;

    public IBeepTheme CurrentTheme { get; private set; }
    public string CurrentThemeName => CurrentTheme?.ThemeName ?? "Default";

    public event EventHandler ThemeChanged;

    private readonly Dictionary<string, IBeepTheme> _themes = new(StringComparer.OrdinalIgnoreCase);

    public void RegisterTheme(IBeepTheme theme)
    {
        if (theme == null) throw new ArgumentNullException(nameof(theme));
        _themes[theme.ThemeName] = theme;
    }

    public bool SetTheme(string themeName)
    {
        if (!_themes.TryGetValue(themeName, out var theme))
            return false;

        var previous = CurrentTheme;
        CurrentTheme = theme;

        if (previous != CurrentTheme)
            ThemeChanged?.Invoke(this, EventArgs.Empty);

        return true;
    }

    public IBeepTheme GetTheme(string themeName)
    {
        return _themes.TryGetValue(themeName, out var theme) ? theme : null;
    }

    public IEnumerable<string> GetThemeNames() => _themes.Keys;

    public void InitializeDefaultThemes()
    {
        RegisterTheme(new UbuntuTheme());
        RegisterTheme(new GNOMETheme());
        RegisterTheme(new CyberpunkTheme());
        RegisterTheme(new CandyTheme());
        RegisterTheme(new ZenTheme());
        RegisterTheme(new CyberpunkNeonTheme());
        SetTheme("Ubuntu"); // default
    }
}
MemberDescription
InstanceThread-safe singleton accessor (Lazy<T>)
CurrentThemeThe currently active IBeepTheme. All controls read from this.
CurrentThemeNameConvenience property returning CurrentTheme.ThemeName or "Default"
ThemeChangedEvent raised when the active theme changes. Controls handle by invalidating/repainting.
RegisterTheme(IBeepTheme)Adds a theme to the registry by its ThemeName. Overwrites if name exists.
SetTheme(string)Activates a theme by name. Returns true if successful. Fires ThemeChanged.
GetTheme(string)Retrieves a registered theme by name. Returns null if not found.
GetThemeNames()Enumerates all registered theme names for UI dropdown/list display.
InitializeDefaultThemes()Registers all 6 built-in themes and sets Ubuntu as default. Called at app startup.

Examples

// Global theme switching
BeepThemesManager.Instance.InitializeDefaultThemes(); // register all 6 themes
BeepThemesManager.Instance.SetTheme("Cyberpunk");

// Check current theme
string currentTheme = BeepThemesManager.Instance.CurrentThemeName;
Console.WriteLine($"Active theme: {currentTheme}"); // "Cyberpunk"

// Register a custom theme
var customTheme = new BeepTheme
{
    ThemeName = "CorporateBlue",
    ButtonBackColor = Color.FromArgb(0, 82, 204),
    ButtonForeColor = Color.White,
    ButtonBorderColor = Color.FromArgb(0, 70, 180),
    ButtonHoverColor = Color.FromArgb(0, 100, 230),
    BackgroundColor = Color.FromArgb(244, 245, 247),
    ForegroundColor = Color.FromArgb(23, 43, 77),
    BorderRadius = 4,
    DefaultFont = new Font("Segoe UI", 9f),
    TitleFont = new Font("Segoe UI", 12f, FontStyle.SemiBold),
    // ... override all needed tokens
};
BeepThemesManager.Instance.RegisterTheme(customTheme);
BeepThemesManager.Instance.SetTheme("CorporateBlue");

// Subscribe to theme changes
BeepThemesManager.Instance.ThemeChanged += (s, e) =>
{
    Console.WriteLine($"Theme switched to: {BeepThemesManager.Instance.CurrentThemeName}");
    // Re-apply any custom overrides that got wiped
};

// Theme selection UI
var themeNames = BeepThemesManager.Instance.GetThemeNames().ToList(); // [Ubuntu, GNOME, Cyberpunk, Candy, Zen, CyberpunkNeon]
comboBoxTheme.Items.AddRange(themeNames);
comboBoxTheme.SelectedValueChanged += (s, e) =>
{
    BeepThemesManager.Instance.SetTheme(comboBoxTheme.SelectedItem.ToString());
};

// Per-control theme inspection
var theme = BeepThemesManager.Instance.CurrentTheme;
Console.WriteLine($"Button color: {theme.ButtonBackColor}");
Console.WriteLine($"Grid header: {theme.GridHeaderBackColor}");
Console.WriteLine($"Chart palette[0]: {theme.ChartPalette[0]}");