diff --git a/src/Avalonia.Themes.Default/SimpleTheme.cs b/src/Avalonia.Themes.Default/SimpleTheme.cs index f5daf9ce55..c0aba17818 100644 --- a/src/Avalonia.Themes.Default/SimpleTheme.cs +++ b/src/Avalonia.Themes.Default/SimpleTheme.cs @@ -10,13 +10,15 @@ namespace Avalonia.Themes.Default { public class SimpleTheme : AvaloniaObject, IStyle, IResourceProvider { + public static readonly StyledProperty ModeProperty = + AvaloniaProperty.Register(nameof(Mode)); + private readonly Uri _baseUri; private bool _isLoading; + private IStyle? _loaded; + private Styles _sharedStyles = new(); private Styles _simpleDark = new(); private Styles _simpleLight = new(); - private Styles _sharedStyles = new(); - private IStyle? _loaded; - /// /// Initializes a new instance of the class. /// @@ -42,32 +44,28 @@ namespace Avalonia.Themes.Default InitStyles(_baseUri); } - public static readonly StyledProperty ModeProperty = - AvaloniaProperty.Register(nameof(Mode)); - /// - /// Gets or sets the mode of the fluent theme (light, dark). - /// - public SimpleThemeMode Mode - { - get => GetValue(ModeProperty); - set => SetValue(ModeProperty, value); - } - protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + public event EventHandler OwnerChanged { - base.OnPropertyChanged(change); - if (change.Property == ModeProperty) + add { - if (Mode == SimpleThemeMode.Dark) + if (Loaded is IResourceProvider rp) { - (Loaded as Styles)![1] = _simpleDark[0]; + rp.OwnerChanged += value; } - else + } + remove + { + if (Loaded is IResourceProvider rp) { - (Loaded as Styles)![1] = _simpleLight[0]; + rp.OwnerChanged -= value; } } } + IReadOnlyList IStyle.Children => _loaded?.Children ?? Array.Empty(); + + bool IResourceNode.HasResources => (Loaded as IResourceProvider)?.HasResources ?? false; + public IStyle Loaded { get @@ -78,7 +76,7 @@ namespace Avalonia.Themes.Default if (Mode == SimpleThemeMode.Light) { - _loaded = new Styles { _sharedStyles , _simpleLight}; + _loaded = new Styles { _sharedStyles, _simpleLight }; } else if (Mode == SimpleThemeMode.Dark) { @@ -91,29 +89,19 @@ namespace Avalonia.Themes.Default } } + /// + /// Gets or sets the mode of the fluent theme (light, dark). + /// + public SimpleThemeMode Mode + { + get => GetValue(ModeProperty); + set => SetValue(ModeProperty, value); + } public IResourceHost? Owner => (Loaded as IResourceProvider)?.Owner; - bool IResourceNode.HasResources => (Loaded as IResourceProvider)?.HasResources ?? false; - - IReadOnlyList IStyle.Children => _loaded?.Children ?? Array.Empty(); + void IResourceProvider.AddOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.AddOwner(owner); - public event EventHandler OwnerChanged - { - add - { - if (Loaded is IResourceProvider rp) - { - rp.OwnerChanged += value; - } - } - remove - { - if (Loaded is IResourceProvider rp) - { - rp.OwnerChanged -= value; - } - } - } + void IResourceProvider.RemoveOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.RemoveOwner(owner); public SelectorMatchResult TryAttach(IStyleable target, IStyleHost? host) => Loaded.TryAttach(target, host); @@ -128,8 +116,22 @@ namespace Avalonia.Themes.Default return false; } - void IResourceProvider.AddOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.AddOwner(owner); - void IResourceProvider.RemoveOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.RemoveOwner(owner); + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + { + base.OnPropertyChanged(change); + if (change.Property == ModeProperty) + { + if (Mode == SimpleThemeMode.Dark) + { + (Loaded as Styles)![1] = _simpleDark[0]; + } + else + { + (Loaded as Styles)![1] = _simpleLight[0]; + } + } + } + private void InitStyles(Uri baseUri) { _sharedStyles = new Styles