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)