Add independent AppLog message types and explicit Class 1/2 severity. Wrap and color log rows, pin Class 1 above Class 2, and let acknowledgement return entries to the current-launch timeline without changing file format or rotation. Ref: https://logtape.org/manual/levels
2.9 KiB
2.9 KiB
Themes — index
The single source of the dark UI theme. See schema.md for the
memory-map conventions.
| File | Purpose |
|---|---|
Controls.xaml |
All custom control styles/templates: YtButton, YtButtonSecondary, IconButton, YtTextBox, YtTextBoxCompact (the dense variant the properties panel uses), YtComboBox/YtComboBoxItem and YtQualityComboBoxItem (paid tiers dim but remain clickable), YtCheckBox, scrollbar/slider/tooltip/context-menu/menu-item/separator/list-item (implicit where app-wide), YtListBoxItem, YtLabel, SectionHeader, and AppLogEntryText (wraps and colors by message type and explicit error class) |
How it's wired:
- Merged once in
App.xaml— app-wide. New windows get the theme automatically; do not re-merge per-window. - Palette: window
#1a1a2e, fields#0f3460, borders#2a3a5e, popups#16213e, accent#e94560, hover#26ffffff, text#e0e0e0.
Gotchas learned the hard way:
MenuItemRolehas noSeparatorvalue — separators are standaloneSeparatorcontrols with their own implicit style.- A custom
ComboBoxtemplate must put theContentPresenter(SelectionBoxItem) inside the ComboBox template, not the ToggleButton template — the latter resolves against the wrong TemplatedParent and renders nothing. - A control with no style renders with the LIGHT WPF system template — a
hand-painted
Background/Foregroundcolours the box but leaves the system border, the system arrow and the white popup list. That is why the Stream Alerts "Display" drop-down looked like it belonged to another app (TASK 58, 2026-10-21). Rule: every control carries a theme style —YtComboBox,YtCheckBox,YtTextBox/YtTextBoxCompact— and paints no colour of its own.ytLive.Tests/PropertiesStyleTests.csfails if that drifts back. ⚠️ But that guard sees only those control TYPES — a picker built as aButton+ a code-builtContextMenuis invisible to it (the border-colour picker was exactly that, TASK 63). A picker that LOOKS like a drop-down must BE the app's drop-down. - The
YtComboBoxpopup sizes to its CONTENT, not to the ComboBox (measured 2026-10-21: the border-colour popup came out 142.7px wide against a 100px ComboBox) — a long row is never clipped, and the popup may be wider than the closed box. Measure, don't guess. - The closed box and the rows of a ComboBox can only differ through an
ItemTemplateSelector— WPF copiesItemTemplateinto the read-onlySelectionBoxItemTemplate, so one template renders in both places. The selector is told them apart by theContentPresenter's templated parent (ComboBox= closed box,ComboBoxItem= a row) — seeHelpers/ClosedBoxTemplateSelector.cs.
Related: Helpers/index.md (custom controls the theme
styles), the XAML files at repo root that consume these styles.