Theme Types
Six concrete theme implementations — Ubuntu (26 files), GNOME (30 files), Cyberpunk (30 files), Candy, Zen, CyberpunkNeon — plus BeepThemesManager singleton
Table of Contents
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 Class | Partial Files | Primary Accent | Style Inspiration | Variants |
|---|---|---|---|---|
UbuntuTheme | 26 | Orange (#E95420) | Ubuntu Linux, warm warm-gray surfaces, dark sidebar | Light, Dark |
GNOMETheme | 30 | Blue (#3584e4) | GNOME Adwaita, flat panels, 8px corners, gray/blue | Light, Dark |
CyberpunkTheme | 30 | Magenta (#FF00FF) | Neon-drenched tech noir, near-black, glow effects | Dark only |
CandyTheme | 1 (single file) | Pink (#FF6B9D) | Soft pastels, 12px+ rounded corners, bubble shapes | Light |
ZenTheme | 1 (single file) | Sage Green (#7C9A6E) | Earth tones, serif-like typography, minimal chrome | Light |
CyberpunkNeonTheme | 5 | Hot Magenta (#FF1493) | Brighter cyberpunk variant, electric cyan, neon green | Dark 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 defaultUbuntuTheme
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 Category | Light Value | Dark 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 radius | 6px | 6px |
| Font (default) | Ubuntu, 9pt | Ubuntu, 9pt |
| Font (title) | Ubuntu, Bold, 12pt | Ubuntu, 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 palette | Orange, Teal, Purple, Gold, Blue, Green, Red, Gray | Orange, 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 Category | Light Value | Dark 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 radius | 8px | 8px |
| Font (default) | Cantarell, 10pt | Cantarell, 10pt |
| Font (title) | Cantarell, Bold, 11pt | Cantarell, 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 palette | Blue, Green, Orange, Purple, Teal, Red, Yellow, Gray | Blue, 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 Category | Value |
|---|---|
| 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 radius | 4px (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 effect | Enabled 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 Category | Value |
|---|---|
| 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 border | None (flat, rounded) |
| Border radius | 14px (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 Category | Value |
|---|---|
| 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 radius | 4px (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 Category | Value |
|---|---|
| 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 radius | 0px (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
}
}| Member | Description |
|---|---|
| Instance | Thread-safe singleton accessor (Lazy<T>) |
| CurrentTheme | The currently active IBeepTheme. All controls read from this. |
| CurrentThemeName | Convenience property returning CurrentTheme.ThemeName or "Default" |
| ThemeChanged | Event 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]}");