diff --git a/Perspex.Direct2D1.RenderTests/Controls/BorderTests.cs b/Perspex.Direct2D1.RenderTests/Controls/BorderTests.cs index 417137ba03..221038dc87 100644 --- a/Perspex.Direct2D1.RenderTests/Controls/BorderTests.cs +++ b/Perspex.Direct2D1.RenderTests/Controls/BorderTests.cs @@ -120,5 +120,29 @@ namespace Perspex.Direct2D1.RenderTests.Controls this.RenderToFile(target); this.CompareImages(); } + + [TestMethod] + public void Border_Margin_Offsets_Content() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Content = new Border + { + BorderBrush = Brushes.Black, + BorderThickness = 2, + Content = new Border + { + Background = Brushes.Red, + Margin = new Thickness(2), + } + } + }; + + this.RenderToFile(target); + this.CompareImages(); + } } } diff --git a/Perspex/Controls/Control.cs b/Perspex/Controls/Control.cs index 3c937b0600..df107995be 100644 --- a/Perspex/Controls/Control.cs +++ b/Perspex/Controls/Control.cs @@ -327,9 +327,11 @@ namespace Perspex.Controls public void Arrange(Rect rect) { + Thickness margin = this.Margin; + this.Bounds = new Rect( - rect.Position, - this.ArrangeContent(rect.Size.Deflate(this.Margin).Constrain(rect.Size))); + new Point(rect.Position.X + margin.Left, rect.Position.Y + margin.Top), + this.ArrangeContent(rect.Size.Deflate(margin).Constrain(rect.Size))); } public void Measure(Size availableSize) diff --git a/TestFiles/Direct2D1/Controls/Border/Border_Margin_Offsets_Content.expected.png b/TestFiles/Direct2D1/Controls/Border/Border_Margin_Offsets_Content.expected.png new file mode 100644 index 0000000000..1fa36969e5 Binary files /dev/null and b/TestFiles/Direct2D1/Controls/Border/Border_Margin_Offsets_Content.expected.png differ