diff --git a/src/Avalonia.Themes.Fluent/DensityStyles/Compact.xaml b/src/Avalonia.Themes.Fluent/DensityStyles/Compact.xaml
index d335e6f4b9..830198f6d1 100644
--- a/src/Avalonia.Themes.Fluent/DensityStyles/Compact.xaml
+++ b/src/Avalonia.Themes.Fluent/DensityStyles/Compact.xaml
@@ -1,22 +1,25 @@
-
-
-
- 14
- 14
- 24
- 2,2,6,1
- 32
- 24
- 0,1,0,2
- 0,1,0,2
- 9,0,0,1
- 10,0,30,0
- 24
- 12,1,0,3
- 32
-
-
+
+ 14
+ 14
+ 24
+ 32
+ 4, 2
+ 4,2
+ 24
+ 11,5,11,7
+ 4 4 8 4
+ 5, 2
+ 24
+ 0,1,0,2
+ 0,1,0,2
+ 9,0,0,1
+ 10,0,30,0
+ 24
+ 12,1,0,3
+ 32
+ 28
+ 6, 0
+ 6,4
+
diff --git a/src/Avalonia.Themes.Fluent/FluentTheme.xaml b/src/Avalonia.Themes.Fluent/FluentTheme.xaml
index c84772aa61..f4467e40ce 100644
--- a/src/Avalonia.Themes.Fluent/FluentTheme.xaml
+++ b/src/Avalonia.Themes.Fluent/FluentTheme.xaml
@@ -18,7 +18,7 @@
-
+
diff --git a/src/Avalonia.Themes.Fluent/FluentTheme.xaml.cs b/src/Avalonia.Themes.Fluent/FluentTheme.xaml.cs
index 5af22dbd1d..378041356a 100644
--- a/src/Avalonia.Themes.Fluent/FluentTheme.xaml.cs
+++ b/src/Avalonia.Themes.Fluent/FluentTheme.xaml.cs
@@ -16,9 +16,10 @@ namespace Avalonia.Themes.Fluent
///
/// Includes the fluent theme in an application.
///
- public class FluentTheme : Styles
+ public class FluentTheme : Styles, IResourceNode
{
- private readonly Styles _compactStyles;
+ private readonly ResourceDictionary _compactStyles;
+ private DensityStyle _densityStyle;
///
/// Initializes a new instance of the class.
@@ -28,9 +29,7 @@ namespace Avalonia.Themes.Fluent
{
AvaloniaXamlLoader.Load(sp, this);
- _compactStyles = (Styles)GetAndRemove("CompactStyles");
-
- EnsureCompactStyles();
+ _compactStyles = (ResourceDictionary)GetAndRemove("CompactStyles");
Palettes = Resources.MergedDictionaries.OfType().FirstOrDefault()
?? throw new InvalidOperationException("FluentTheme was initialized with missing ColorPaletteResourcesCollection.");
@@ -43,17 +42,17 @@ namespace Avalonia.Themes.Fluent
return val;
}
}
-
- public static readonly StyledProperty DensityStyleProperty =
- AvaloniaProperty.Register(nameof(DensityStyle));
+
+ public static readonly DirectProperty DensityStyleProperty = AvaloniaProperty.RegisterDirect(
+ nameof(DensityStyle), o => o.DensityStyle, (o, v) => o.DensityStyle = v);
///
/// Gets or sets the density style of the fluent theme (normal, compact).
///
public DensityStyle DensityStyle
{
- get => GetValue(DensityStyleProperty);
- set => SetValue(DensityStyleProperty, value);
+ get => _densityStyle;
+ set => SetAndRaise(DensityStyleProperty, ref _densityStyle, value);
}
public IDictionary Palettes { get; }
@@ -64,20 +63,20 @@ namespace Avalonia.Themes.Fluent
if (change.Property == DensityStyleProperty)
{
- EnsureCompactStyles();
+ Owner?.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Empty);
}
}
- private void EnsureCompactStyles()
+ bool IResourceNode.TryGetResource(object key, ThemeVariant? theme, out object? value)
{
- if (DensityStyle == DensityStyle.Compact)
+ // DensityStyle dictionary should be checked first
+ if (_densityStyle == DensityStyle.Compact
+ && _compactStyles.TryGetResource(key, theme, out value))
{
- Add(_compactStyles);
- }
- else
- {
- Remove(_compactStyles);
+ return true;
}
+
+ return base.TryGetResource(key, theme, out value);
}
}
}