Use this checklist when reviewing Reactor UI code for Windows 11 design compliance.
- Uses
Theme.*tokens orTheme.Ref()for colors/brushes — no hardcoded hex on themed surfaces - Uses
Theme.Ref()with keys ending inBrush(not the Color name) - No hardcoded colors in High Contrast code paths
- No opacity on elements in HC — translucency encoded in alpha channel for Light/Dark only
- Acrylic surfaces use correct background + border pairings
-
BackgroundSizing = InnerBorderEdgeset on bordered acrylic containers -
HighContrastAdjustmentset at app level if custom theme dictionaries are used - No partial theme updates — Light/Dark
.Resources()changes tested with HC in the same change - Interactive containers (clickable cards, list items) have visible borders in HC
- Uses semantic text factories (
Heading,SubHeading,Caption,Text) or WinUI style tokens - No raw
FontSize+FontWeightfor standard UI text -
FontWeightis SemiBold (600), not Bold (700) — exceptHeading()page titles - Applied WinUI styles via
.Set()don't also re-declare properties the style already defines - Minimum font size is 12px
- Icon fonts use
SymbolThemeFontFamily— not hardcoded"Segoe Fluent Icons" - Icon TextBlocks set
IsTextScaleFactorEnabled = false - Icons and text top-aligned in wrapping scenarios (not center, which drifts at large text scales)
- Default foreground (
TextFillColorPrimaryBrush) not explicitly set onTextBlock() - Changing numbers use tabular numerals
- Trimmed text has a tooltip for overflow content
- TextWrapping choice is intentional —
Wrap/WrapWholeWordswhere text should flow
- All margins, padding, spacing use multiples of 4
- Corner radius is 4 (controls) or 8 (overlays) — no non-standard values
- Uses
MinHeight/MinWidthinstead of fixedHeight/Widthfor text containers - No fixed heights on text containers — clips at larger text scales
- No fixed widths on buttons — clips long localized strings
- Uses
Borderfor single-child containers (notGrid/VStackwrappers) - No unnecessary wrapper containers without layout or styling purpose
-
HStackdoes not contain text that needsTextTrimming - Text trimming columns use
GridSize.Star()(notGridSize.Auto, which also prevents trimming) - Uses spacing parameters, not spacer elements
- Mixed-control rows explicitly set
VAlign(VerticalAlignment.Center) -
ThemeShadowhasTranslation(0, 0, 32)for elevation - Shadow containers have 12px parent padding for clipping prevention
- ScrollView sets
HorizontalContentAlignment = Stretch
-
.Resources()used for button visual state overrides (not.Background()directly) - All visual states covered when overriding (rest + hover + pressed + disabled)
- No explicit setting of WinUI default values (default padding, corner radius, etc.)
- No no-op
.Resources()overrides that repeat WinUI defaults - Uses existing WinUI styles before creating custom overrides
-
AutomationNameset on icon-only controls -
HeadingLevelset on heading text for screen reader navigation -
AccessKeyset on primary actions -
PositionInSet/SizeOfSetset on list items -
LiveRegionset on dynamically updated status text - Hit-test targets for light-dismiss are visible (
Background("#00000000")) -
DividerStrokeColorDefaultBrushused for dividers (custom brushes break in HC)
-
.WithKey()set on items in dynamic lists - Hooks are unconditional and in consistent order
- No hooks inside
ifblocks or variable-length loops -
UseCallbackwraps handlers passed to child components -
UseMemowraps expensive computations -
UseEffectcleanup returns dispose logic for timers/subscriptions
- No deep visual tree nesting — flatten where possible
-
Borderused instead of single-childGrid/VStack -
.Set()used only for properties not exposed as modifiers - Large lists use
ListView(virtualized), notVStack+.Select()
- PR scope excludes unrelated churn — every
.Resources()or styling change maps to a concrete UX reason - No broad styling edits unrelated to the feature being changed
- Reviewer can map each visual change to an intent
- Tested in Light, Dark, and High Contrast (NightSky) themes
- Tested hover/pressed states on interactive elements
- Tested at 100%, 150%, 200%, 250% display scaling
- Tested with maximum text scaling
- Tested with long/localized strings
- Before/after screenshots included for visual changes
- Acrylic pairing and shadow clipping verified after layout changes
- Figma measurements validated at 100% scale factor