1 changed files with 75 additions and 0 deletions
@ -0,0 +1,75 @@ |
|||
# Avalonia.Themes.Fluent2 |
|||
|
|||
A modern Fluent theme for Avalonia implementing the **Fluent 2 / WinUI 3 visual |
|||
language** (the design system Microsoft shipped with Windows 11), built as a |
|||
**drop-in replacement** for `Avalonia.Themes.Fluent`. |
|||
|
|||
Reference implementation: the WinUI 3 resource dictionaries (release 1.5.2 |
|||
baseline, individual controls up to 1.8.x) as ported by Uno Platform's |
|||
`Uno.UI.FluentTheme.v2`. |
|||
|
|||
## Usage |
|||
|
|||
```xml |
|||
<Application.Styles> |
|||
<Fluent2Theme /> |
|||
</Application.Styles> |
|||
``` |
|||
|
|||
Migrating from `Avalonia.Themes.Fluent`: change the package reference and swap |
|||
`<FluentTheme />` for `<Fluent2Theme />`. Everything else keeps working: |
|||
|
|||
- **Resource key overrides** — every v1 resource key (`ButtonBackground`, |
|||
`TextControlBorderBrushFocused`, `ControlCornerRadius`, …) still resolves |
|||
with a compatible runtime type. Values changed; names did not. |
|||
- **`Classes="accent"`**, pseudo-class selectors, template part names and named |
|||
control themes are unchanged. |
|||
- **`Fluent2Theme.Palettes`** keeps the v1 `ColorPaletteResources` API. `Accent` |
|||
flows into all the new accent tokens. Non-accent legacy colors |
|||
(`RegionColor`, `BaseHigh`, `BaseMediumHigh`, `BaseMedium`, `BaseLow`, |
|||
`ChromeMedium`, `ErrorText`) heuristically drive the nearest Fluent 2 tokens; |
|||
for exact control override the token keys directly |
|||
(`SolidBackgroundFillColorBase`, `TextFillColorPrimary`, …). |
|||
- **`DensityStyle="Compact"`** is preserved and re-derived against the new |
|||
metrics. |
|||
|
|||
## What changed visually (intentional) |
|||
|
|||
| Default | v1 | Fluent2 | |
|||
|---|---|---| |
|||
| `ControlCornerRadius` | 3 | **4** | |
|||
| `OverlayCornerRadius` | 5 | **8** | |
|||
| `ButtonPadding` | 8,5,8,6 | **11,5,11,6** | |
|||
| `TextControlThemePadding` | 10,6,6,5 | **10,5,6,6** | |
|||
| Focused text border | 2 uniform | **1,1,1,2** + accent underline | |
|||
| Button press | scale(0.98) | **fill change + 83 ms cross-fade** (WinUI has no press scale) | |
|||
| Control borders | flat | **gradient elevation borders** (darker bottom edge) | |
|||
| List/tree/combo selection | full-row accent | **subtle fill + 3×16 accent pill** | |
|||
| Scroll bars | 16 px rail | **12 px rail, 2 px collapsed thumb** | |
|||
| Window background | AltHigh | **SolidBackgroundFillColorBase** (#F3F3F3/#202020) | |
|||
| Default accent shades | HSL-computed | **WinUI static values** (when no OS accent) | |
|||
|
|||
The full WinUI 3 token family (`TextFillColor*`, `ControlFillColor*`, |
|||
`SubtleFillColor*`, `ControlStrokeColor*`, `CardBackgroundFillColor*`, |
|||
`SolidBackgroundFillColor*`, `SystemFillColor*`, `AccentFillColor*`, elevation |
|||
border brushes, acrylic fallbacks) is available for app use alongside the |
|||
legacy `SystemControl*` aliases. |
|||
|
|||
## Known scope limitations |
|||
|
|||
- Acrylic/Mica surfaces ship as their solid fallback colors (WinUI's own |
|||
fallback mode); real translucency is a possible future enhancement. |
|||
- `TabControl` maps to the WinUI **Pivot** header look (Avalonia's TabItem |
|||
semantics); the TabView document-tab look is out of scope. |
|||
- No HighContrast variant yet (same as v1). |
|||
- AnimatedIcon glyph animations are approximated with static glyphs and simple |
|||
transitions. |
|||
- OS-provided accent colors still use HSL-computed shades, which can deviate |
|||
slightly from Windows' palette algorithm. |
|||
|
|||
## Compatibility tests |
|||
|
|||
`tests/Avalonia.Themes.Fluent2.UnitTests` enforces the drop-in contract against |
|||
the live v1 theme: key parity in both variants with compatible runtime types, |
|||
implicit `ControlTheme` coverage, palette semantics, compact-density key |
|||
parity, and an instantiation/render smoke test over every themed control. |
|||
Loading…
Reference in new issue