Browse Source

Merge pull request #11882 from AvaloniaUI/fix-fluent-compact-theme

Fix fluent compact theme
pull/11904/head
Max Katz 3 years ago
committed by GitHub
parent
commit
4ccd7c56da
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 47
      src/Avalonia.Themes.Fluent/DensityStyles/Compact.xaml
  2. 2
      src/Avalonia.Themes.Fluent/FluentTheme.xaml
  3. 35
      src/Avalonia.Themes.Fluent/FluentTheme.xaml.cs

47
src/Avalonia.Themes.Fluent/DensityStyles/Compact.xaml

@ -1,22 +1,25 @@
<Styles xmlns="https://github.com/avaloniaui" <ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:ClassModifier="internal"> x:ClassModifier="internal">
<Style Selector="TextBlock" > <x:Double x:Key="ControlContentThemeFontSize">14</x:Double>
<Setter Property="FontSize" Value="14" /> <x:Double x:Key="ContentControlFontSize">14</x:Double>
</Style> <x:Double x:Key="TextControlThemeMinHeight">24</x:Double>
<Styles.Resources> <x:Double x:Key="TextControlThemeMinWidth">32</x:Double>
<x:Double x:Key="ControlContentThemeFontSize">14</x:Double> <Thickness x:Key="TextControlThemePadding">4, 2</Thickness>
<x:Double x:Key="ContentControlFontSize">14</x:Double> <Thickness x:Key="ListBoxItemPadding">4,2</Thickness>
<x:Double x:Key="TextControlThemeMinHeight">24</x:Double> <x:Double x:Key="ListViewItemMinHeight">24</x:Double>
<Thickness x:Key="TextControlThemePadding">2,2,6,1</Thickness> <Thickness x:Key="ComboBoxItemThemePadding">11,5,11,7</Thickness>
<x:Double x:Key="ListViewItemMinHeight">32</x:Double> <Thickness x:Key="MenuFlyoutItemThemePaddingNarrow">4 4 8 4</Thickness>
<x:Double x:Key="TreeViewItemMinHeight">24</x:Double> <Thickness x:Key="MenuBarItemPadding">5, 2</Thickness>
<Thickness x:Key="TimePickerHostPadding">0,1,0,2</Thickness> <x:Double x:Key="TreeViewItemMinHeight">24</x:Double>
<Thickness x:Key="DatePickerHostPadding">0,1,0,2</Thickness> <Thickness x:Key="TimePickerHostPadding">0,1,0,2</Thickness>
<Thickness x:Key="DatePickerHostMonthPadding">9,0,0,1</Thickness> <Thickness x:Key="DatePickerHostPadding">0,1,0,2</Thickness>
<Thickness x:Key="ComboBoxEditableTextPadding">10,0,30,0</Thickness> <Thickness x:Key="DatePickerHostMonthPadding">9,0,0,1</Thickness>
<x:Double x:Key="ComboBoxMinHeight">24</x:Double> <Thickness x:Key="ComboBoxEditableTextPadding">10,0,30,0</Thickness>
<Thickness x:Key="ComboBoxPadding">12,1,0,3</Thickness> <x:Double x:Key="ComboBoxMinHeight">24</x:Double>
<x:Double x:Key="NavigationViewItemOnLeftMinHeight">32</x:Double> <Thickness x:Key="ComboBoxPadding">12,1,0,3</Thickness>
</Styles.Resources> <x:Double x:Key="NavigationViewItemOnLeftMinHeight">32</x:Double>
</Styles> <x:Double x:Key="TabItemMinHeight">28</x:Double>
<Thickness x:Key="TabItemHeaderMargin">6, 0</Thickness>
<Thickness x:Key="ButtonPadding">6,4</Thickness>
</ResourceDictionary>

2
src/Avalonia.Themes.Fluent/FluentTheme.xaml

@ -18,7 +18,7 @@
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<!-- These are not part of MergedDictionaries so we can add or remove them easier --> <!-- These are not part of MergedDictionaries so we can add or remove them easier -->
<StyleInclude x:Key="CompactStyles" Source="/DensityStyles/Compact.xaml" /> <ResourceInclude x:Key="CompactStyles" Source="/DensityStyles/Compact.xaml" />
</ResourceDictionary> </ResourceDictionary>
</Styles.Resources> </Styles.Resources>

35
src/Avalonia.Themes.Fluent/FluentTheme.xaml.cs

@ -16,9 +16,10 @@ namespace Avalonia.Themes.Fluent
/// <summary> /// <summary>
/// Includes the fluent theme in an application. /// Includes the fluent theme in an application.
/// </summary> /// </summary>
public class FluentTheme : Styles public class FluentTheme : Styles, IResourceNode
{ {
private readonly Styles _compactStyles; private readonly ResourceDictionary _compactStyles;
private DensityStyle _densityStyle;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="FluentTheme"/> class. /// Initializes a new instance of the <see cref="FluentTheme"/> class.
@ -28,9 +29,7 @@ namespace Avalonia.Themes.Fluent
{ {
AvaloniaXamlLoader.Load(sp, this); AvaloniaXamlLoader.Load(sp, this);
_compactStyles = (Styles)GetAndRemove("CompactStyles"); _compactStyles = (ResourceDictionary)GetAndRemove("CompactStyles");
EnsureCompactStyles();
Palettes = Resources.MergedDictionaries.OfType<ColorPaletteResourcesCollection>().FirstOrDefault() Palettes = Resources.MergedDictionaries.OfType<ColorPaletteResourcesCollection>().FirstOrDefault()
?? throw new InvalidOperationException("FluentTheme was initialized with missing ColorPaletteResourcesCollection."); ?? throw new InvalidOperationException("FluentTheme was initialized with missing ColorPaletteResourcesCollection.");
@ -43,17 +42,17 @@ namespace Avalonia.Themes.Fluent
return val; return val;
} }
} }
public static readonly StyledProperty<DensityStyle> DensityStyleProperty = public static readonly DirectProperty<FluentTheme, DensityStyle> DensityStyleProperty = AvaloniaProperty.RegisterDirect<FluentTheme, DensityStyle>(
AvaloniaProperty.Register<FluentTheme, DensityStyle>(nameof(DensityStyle)); nameof(DensityStyle), o => o.DensityStyle, (o, v) => o.DensityStyle = v);
/// <summary> /// <summary>
/// Gets or sets the density style of the fluent theme (normal, compact). /// Gets or sets the density style of the fluent theme (normal, compact).
/// </summary> /// </summary>
public DensityStyle DensityStyle public DensityStyle DensityStyle
{ {
get => GetValue(DensityStyleProperty); get => _densityStyle;
set => SetValue(DensityStyleProperty, value); set => SetAndRaise(DensityStyleProperty, ref _densityStyle, value);
} }
public IDictionary<ThemeVariant, ColorPaletteResources> Palettes { get; } public IDictionary<ThemeVariant, ColorPaletteResources> Palettes { get; }
@ -64,20 +63,20 @@ namespace Avalonia.Themes.Fluent
if (change.Property == DensityStyleProperty) 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); return true;
}
else
{
Remove(_compactStyles);
} }
return base.TryGetResource(key, theme, out value);
} }
} }
} }

Loading…
Cancel
Save