|
|
|
@ -10,13 +10,15 @@ namespace Avalonia.Themes.Default |
|
|
|
{ |
|
|
|
public class SimpleTheme : AvaloniaObject, IStyle, IResourceProvider |
|
|
|
{ |
|
|
|
public static readonly StyledProperty<SimpleThemeMode> ModeProperty = |
|
|
|
AvaloniaProperty.Register<SimpleTheme, SimpleThemeMode>(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; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Initializes a new instance of the <see cref="SimpleTheme"/> class.
|
|
|
|
/// </summary>
|
|
|
|
@ -42,32 +44,28 @@ namespace Avalonia.Themes.Default |
|
|
|
InitStyles(_baseUri); |
|
|
|
} |
|
|
|
|
|
|
|
public static readonly StyledProperty<SimpleThemeMode> ModeProperty = |
|
|
|
AvaloniaProperty.Register<SimpleTheme, SimpleThemeMode>(nameof(Mode)); |
|
|
|
/// <summary>
|
|
|
|
/// Gets or sets the mode of the fluent theme (light, dark).
|
|
|
|
/// </summary>
|
|
|
|
public SimpleThemeMode Mode |
|
|
|
{ |
|
|
|
get => GetValue(ModeProperty); |
|
|
|
set => SetValue(ModeProperty, value); |
|
|
|
} |
|
|
|
protected override void OnPropertyChanged<T>(AvaloniaPropertyChangedEventArgs<T> 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> IStyle.Children => _loaded?.Children ?? Array.Empty<IStyle>(); |
|
|
|
|
|
|
|
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 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets or sets the mode of the fluent theme (light, dark).
|
|
|
|
/// </summary>
|
|
|
|
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> IStyle.Children => _loaded?.Children ?? Array.Empty<IStyle>(); |
|
|
|
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<T>(AvaloniaPropertyChangedEventArgs<T> 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 |
|
|
|
|