From 4c649b479f8f56e0d91e30e0d611aeef2a17df7b Mon Sep 17 00:00:00 2001 From: Mike James Date: Mon, 13 Jul 2026 12:45:09 +0200 Subject: [PATCH] Fluent2: re-skin Phase D chrome, notifications and misc controls - Window/EmbeddableControlRoot: SolidBackgroundFillColorBase canvas - WindowDrawnDecorations: Windows 11 caption buttons (46x32, subtle fills, red close hover #C42B1C with white glyph), 10px glyphs, hairline frame - NotificationCard as WinUI InfoBar: r4 card, severity background tints + 16px severity badges, subtle close button; notification manager spacing - CommandBar: transparent rest / acrylic-fallback open state per WinUI, AppBarButton subtle pills with accent-checked toggles, WinUI separators - Mobile pages: SolidBackgroundFillColorBaseAlt bars with dividers, 40px subtle back button, SmokeFillColorDefault drawer scrim, 3px accent tab indicator; TextSelectionHandle accent recolor - Label/HeaderedContentControl typography; GroupBox converted to the card idiom; GridSplitter subtle hover; RefreshVisualizer accent spinner - ManagedFileChooser re-tokened (layer sidebar, divider rules) - Compact density re-derived against WinUI 3 base metrics; adds ListBoxItemMinHeight 24 so compact lists actually shrink All 8 audit tests green; verified light+dark headless renders. Co-Authored-By: Claude Fable 5 --- .../Accents/FluentControlResources.xaml | 24 +- .../Controls/CarouselPage.xaml | 2 +- .../Controls/CommandBar.xaml | 207 +++++++++++++++--- .../Controls/ContentPage.xaml | 4 +- .../Controls/DrawerPage.xaml | 14 +- .../Controls/EmbeddableControlRoot.xaml | 2 +- .../Controls/GridSplitter.xaml | 28 ++- .../Controls/GroupBox.xaml | 81 +++---- .../Controls/HeaderedContentControl.xaml | 16 +- .../Controls/Label.xaml | 15 ++ .../Controls/ManagedFileChooser.xaml | 29 +-- .../Controls/NavigationPage.xaml | 27 ++- .../Controls/NotificationCard.xaml | 159 ++++++++++++-- .../Controls/RefreshContainer.xaml | 8 + .../Controls/RefreshVisualizer.xaml | 7 +- .../Controls/TabbedPage.xaml | 45 ++-- .../Controls/TextSelectionHandle.xaml | 10 +- .../Controls/Window.xaml | 5 +- .../Controls/WindowDrawnDecorations.xaml | 95 +++++--- .../Controls/WindowNotificationManager.xaml | 30 ++- .../DensityStyles/Compact.xaml | 20 +- 21 files changed, 617 insertions(+), 211 deletions(-) diff --git a/src/Avalonia.Themes.Fluent2/Accents/FluentControlResources.xaml b/src/Avalonia.Themes.Fluent2/Accents/FluentControlResources.xaml index fcf9bc162a..24a2bacdd8 100644 --- a/src/Avalonia.Themes.Fluent2/Accents/FluentControlResources.xaml +++ b/src/Avalonia.Themes.Fluent2/Accents/FluentControlResources.xaml @@ -84,7 +84,7 @@ - 4 + 12 16 0,4,0,12 1 @@ -383,12 +383,12 @@ - + - - - - + + + + 1 @@ -774,7 +774,7 @@ - 4 + 12 16 0,4,0,12 1 @@ -1074,12 +1074,12 @@ - + - - - - + + + + 1 diff --git a/src/Avalonia.Themes.Fluent2/Controls/CarouselPage.xaml b/src/Avalonia.Themes.Fluent2/Controls/CarouselPage.xaml index 6415084dc9..25b5d67cb3 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/CarouselPage.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/CarouselPage.xaml @@ -14,7 +14,7 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - + + + + + + + @@ -65,12 +135,23 @@ + + + + + @@ -122,24 +203,33 @@ - + - - + + + + - + + + + + + + @@ -161,17 +253,46 @@ + - + + + + + + + + + + + @@ -223,34 +344,42 @@ - + - + - - + - + - + + + + + + @@ -258,26 +387,33 @@ - + + + + + + - + @@ -301,15 +437,17 @@ - + - + + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/ContentPage.xaml b/src/Avalonia.Themes.Fluent2/Controls/ContentPage.xaml index 5ccbe8cf38..eec3f936ca 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/ContentPage.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/ContentPage.xaml @@ -9,8 +9,8 @@ - - + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml b/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml index e93d6c9022..26d991de24 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml @@ -13,11 +13,13 @@ M3 17h18a1 1 0 0 1 .117 1.993L21 19H3a1 1 0 0 1-.117-1.993L3 17h18H3Zm0-6 18-.002a1 1 0 0 1 .117 1.993l-.117.007L3 13a1 1 0 0 1-.117-1.993L3 11l18-.002L3 11Zm0-6h18a1 1 0 0 1 .117 1.993L21 7H3a1 1 0 0 1-.117-1.993L3 5h18H3Z 48 - + - - + + + + @@ -128,6 +133,9 @@ Padding="5" Height="{DynamicResource NavigationControlNavBarHeight}" Background="{DynamicResource NavigationControlNavBarBackground}" + BackgroundSizing="InnerBorderEdge" + BorderBrush="{DynamicResource DividerStrokeColorDefaultBrush}" + BorderThickness="0,1,0,0" DockPanel.Dock="Bottom" IsVisible="False"> diff --git a/src/Avalonia.Themes.Fluent2/Controls/EmbeddableControlRoot.xaml b/src/Avalonia.Themes.Fluent2/Controls/EmbeddableControlRoot.xaml index 2ea83ec6a9..e95092aa65 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/EmbeddableControlRoot.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/EmbeddableControlRoot.xaml @@ -3,7 +3,7 @@ x:ClassModifier="internal"> - + diff --git a/src/Avalonia.Themes.Fluent2/Controls/GridSplitter.xaml b/src/Avalonia.Themes.Fluent2/Controls/GridSplitter.xaml index fc08d6b0b6..affbfe4357 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/GridSplitter.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/GridSplitter.xaml @@ -1,14 +1,28 @@ - + + + + + + + + + + + - + + @@ -19,5 +33,13 @@ Background="{TemplateBinding Background}" /> + + + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/GroupBox.xaml b/src/Avalonia.Themes.Fluent2/Controls/GroupBox.xaml index 5b31fdb55c..617c225485 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/GroupBox.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/GroupBox.xaml @@ -3,77 +3,58 @@ xmlns:converters="clr-namespace:Avalonia.Controls.Converters;assembly=Avalonia.Controls" x:ClassModifier="internal"> - + + + + - - + + - - - - - - - - - - - - - - - + + + Padding="0,0,0,8"> - - + + + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/HeaderedContentControl.xaml b/src/Avalonia.Themes.Fluent2/Controls/HeaderedContentControl.xaml index 4474ac07ab..de9ac65b00 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/HeaderedContentControl.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/HeaderedContentControl.xaml @@ -1,6 +1,16 @@ + + + + + + + + + @@ -16,6 +26,10 @@ @@ -36,7 +50,7 @@ + diff --git a/src/Avalonia.Themes.Fluent2/Controls/Label.xaml b/src/Avalonia.Themes.Fluent2/Controls/Label.xaml index daf38c2829..fbca9ec3a5 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/Label.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/Label.xaml @@ -1,8 +1,19 @@ + + + + + + + + @@ -22,5 +33,9 @@ + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/ManagedFileChooser.xaml b/src/Avalonia.Themes.Fluent2/Controls/ManagedFileChooser.xaml index c980135eca..101b882c70 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/ManagedFileChooser.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/ManagedFileChooser.xaml @@ -134,7 +134,7 @@ - + @@ -160,7 +160,7 @@ - + + + @@ -83,17 +187,38 @@ - + - - + + + + + - diff --git a/src/Avalonia.Themes.Fluent2/Controls/RefreshContainer.xaml b/src/Avalonia.Themes.Fluent2/Controls/RefreshContainer.xaml index b030acca30..2bcc0bee37 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/RefreshContainer.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/RefreshContainer.xaml @@ -1,8 +1,16 @@ + + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/RefreshVisualizer.xaml b/src/Avalonia.Themes.Fluent2/Controls/RefreshVisualizer.xaml index c5f993bb0e..83eea96573 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/RefreshVisualizer.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/RefreshVisualizer.xaml @@ -1,6 +1,11 @@ + @@ -10,7 +15,7 @@ + Value="{DynamicResource AccentFillColorDefaultBrush}"/>