diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs index 2fcea8c205..ec6483b59e 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs @@ -367,6 +367,8 @@ namespace Avalonia.Rendering.SceneGraph private static bool ShouldStartLayer(IVisual visual) { + if (visual.WantsLayer) + return true; var o = visual as IAvaloniaObject; return visual.VisualChildren.Count > 0 && o != null && diff --git a/src/Avalonia.Visuals/Visual.cs b/src/Avalonia.Visuals/Visual.cs index f26c21d1b6..b20e96b692 100644 --- a/src/Avalonia.Visuals/Visual.cs +++ b/src/Avalonia.Visuals/Visual.cs @@ -90,10 +90,18 @@ namespace Avalonia public static readonly StyledProperty ZIndexProperty = AvaloniaProperty.Register(nameof(ZIndex)); + /// + /// Defines the property. + /// + public static readonly DirectProperty WantsLayerProperty = + AvaloniaProperty.RegisterDirect("WantsLayer", o => o._wantsLayer, + (o, v) => o._wantsLayer = v); + private Rect _bounds; private TransformedBounds? _transformedBounds; private IRenderRoot _visualRoot; private IVisual _visualParent; + private bool _wantsLayer; /// /// Initializes static members of the class. @@ -105,7 +113,8 @@ namespace Avalonia ClipProperty, ClipToBoundsProperty, IsVisibleProperty, - OpacityProperty); + OpacityProperty, + WantsLayerProperty); RenderTransformProperty.Changed.Subscribe(RenderTransformChanged); } @@ -239,6 +248,15 @@ namespace Avalonia private set; } + /// + /// Allows to explicitly force a rendering layer for a particular visual. Use with caution. + /// + public bool WantsLayer + { + get => GetValue(WantsLayerProperty); + set => SetValue(WantsLayerProperty, value); + } + /// /// Gets the root of the visual tree, if the control is attached to a visual tree. /// diff --git a/src/Avalonia.Visuals/VisualTree/IVisual.cs b/src/Avalonia.Visuals/VisualTree/IVisual.cs index 278a802597..8b22bae7cb 100644 --- a/src/Avalonia.Visuals/VisualTree/IVisual.cs +++ b/src/Avalonia.Visuals/VisualTree/IVisual.cs @@ -127,5 +127,10 @@ namespace Avalonia.VisualTree /// common ancestor. /// Matrix? TransformToVisual(IVisual visual); + + /// + /// Allows to explicitly force a rendering layer for a particular visual. Use with caution. + /// + bool WantsLayer { get; } } }