diff --git a/src/Avalonia.Controls/Shapes/Shape.cs b/src/Avalonia.Controls/Shapes/Shape.cs index 2ea681891d..a1848a95b1 100644 --- a/src/Avalonia.Controls/Shapes/Shape.cs +++ b/src/Avalonia.Controls/Shapes/Shape.cs @@ -61,12 +61,26 @@ namespace Avalonia.Controls.Shapes { get { - if (_renderedGeometry == null) + if (_renderedGeometry == null && DefiningGeometry != null) { - if (DefiningGeometry != null) + if (_transform == Matrix.Identity) + { + _renderedGeometry = DefiningGeometry; + } + else { _renderedGeometry = DefiningGeometry.Clone(); - _renderedGeometry.Transform = new MatrixTransform(_transform); + + if (_renderedGeometry.Transform == null || + _renderedGeometry.Transform.Value == Matrix.Identity) + { + _renderedGeometry.Transform = new MatrixTransform(_transform); + } + else + { + _renderedGeometry.Transform = new MatrixTransform( + _renderedGeometry.Transform.Value * _transform); + } } } @@ -193,6 +207,7 @@ namespace Avalonia.Controls.Shapes return finalSize; } + private Size CalculateShapeSizeAndSetTransform(Size availableSize) { // This should probably use GetRenderBounds(strokeThickness) but then the calculations