diff --git a/src/Avalonia.Themes.Fluent/FluentTheme.cs b/src/Avalonia.Themes.Fluent/FluentTheme.cs
index 53be41e4d13..d1136d44a49 100644
--- a/src/Avalonia.Themes.Fluent/FluentTheme.cs
+++ b/src/Avalonia.Themes.Fluent/FluentTheme.cs
@@ -15,6 +15,12 @@ public enum FluentThemeMode
Dark,
}
+ public enum DensityStyle
+ {
+ Normal,
+ Compact
+ }
+
///
/// Includes the fluent theme in an application.
///
@@ -24,6 +30,7 @@ public class FluentTheme : AvaloniaObject, IStyle, IResourceProvider
private Styles _fluentDark = new();
private Styles _fluentLight = new();
private Styles _sharedStyles = new();
+ private Styles _densityStyles = new();
private bool _isLoading;
private IStyle? _loaded;
@@ -47,9 +54,12 @@ public FluentTheme(IServiceProvider serviceProvider)
InitStyles(_baseUri);
}
-
public static readonly StyledProperty ModeProperty =
AvaloniaProperty.Register(nameof(Mode));
+
+ public static readonly StyledProperty DensityStyleProperty =
+ AvaloniaProperty.Register(nameof(DensityStyle));
+
///
/// Gets or sets the mode of the fluent theme (light, dark).
///
@@ -58,6 +68,16 @@ public FluentThemeMode Mode
get => GetValue(ModeProperty);
set => SetValue(ModeProperty, value);
}
+
+ ///
+ /// Gets or sets the density style of the fluent theme (normal, compact).
+ ///
+ public DensityStyle DensityStyle
+ {
+ get => GetValue(DensityStyleProperty);
+ set => SetValue(DensityStyleProperty, value);
+ }
+
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);
@@ -74,6 +94,18 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs
(Loaded as Styles)![2] = _fluentLight[1];
}
}
+
+ if (change.Property == DensityStyleProperty)
+ {
+ if (DensityStyle == DensityStyle.Compact)
+ {
+ (Loaded as Styles)!.Add(_densityStyles[0]);
+ }
+ else if (DensityStyle == DensityStyle.Normal)
+ {
+ (Loaded as Styles)!.Remove(_densityStyles[0]);
+ }
+ }
}
public IResourceHost? Owner => (Loaded as IResourceProvider)?.Owner;
@@ -97,6 +129,12 @@ public IStyle Loaded
{
_loaded = new Styles() { _sharedStyles, _fluentDark[0], _fluentDark[1] };
}
+
+ if (DensityStyle == DensityStyle.Compact)
+ {
+ (_loaded as Styles)!.Add(_densityStyles[0]);
+ }
+
_isLoading = false;
}
@@ -183,6 +221,14 @@ private void InitStyles(Uri baseUri)
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml")
}
};
+
+ _densityStyles = new Styles
+ {
+ new StyleInclude(baseUri)
+ {
+ Source = new Uri("avares://Avalonia.Themes.Fluent/DensityStyles/Compact.xaml")
+ }
+ };
}
}
}