diff --git a/src/Avalonia.Base/Styling/StyleBase.cs b/src/Avalonia.Base/Styling/StyleBase.cs index 3b12fda731..fc293f4bda 100644 --- a/src/Avalonia.Base/Styling/StyleBase.cs +++ b/src/Avalonia.Base/Styling/StyleBase.cs @@ -11,7 +11,7 @@ namespace Avalonia.Styling /// /// Base class for and . /// - public abstract class StyleBase : AvaloniaObject, IStyle, IResourceProvider + public abstract class StyleBase : AvaloniaObject, IStyle, IResourceProvider, IAddChild, IAddChild, IAddChild { private IResourceHost? _owner; private StyleChildren? _children; @@ -72,6 +72,25 @@ namespace Avalonia.Styling public void Add(SetterBase setter) => Setters.Add(setter); public void Add(IStyle style) => Children.Add(style); + void IAddChild.AddChild(object child) + { + switch (child) + { + case SetterBase setter: + Setters.Add(setter); + break; + case IStyle style: + Children.Add(style); + break; + default: + throw new InvalidOperationException($"Cannot add {child.GetType()} to a style."); + } + } + + void IAddChild.AddChild(SetterBase setter) => Setters.Add(setter); + + void IAddChild.AddChild(IStyle style) => Children.Add(style); + public event EventHandler? OwnerChanged; public bool TryGetResource(object key, ThemeVariant? themeVariant, out object? result)