Browse Source

Merge pull request #994 from AvaloniaUI/fixes/993-margin-width-height

Apply margin before width/height.
pull/989/merge
Nikita Tsukanov 9 years ago
committed by GitHub
parent
commit
e822198958
  1. 7
      src/Avalonia.Layout/Layoutable.cs
  2. 53
      tests/Avalonia.Layout.UnitTests/MeasureTests.cs

7
src/Avalonia.Layout/Layoutable.cs

@ -456,10 +456,9 @@ namespace Avalonia.Layout
ApplyTemplate();
var constrained = LayoutHelper
.ApplyLayoutConstraints(this, availableSize)
.Deflate(margin);
var constrained = LayoutHelper.ApplyLayoutConstraints(
this,
availableSize.Deflate(margin));
var measured = MeasureOverride(constrained);
var width = measured.Width;

53
tests/Avalonia.Layout.UnitTests/MeasureTests.cs

@ -100,5 +100,58 @@ namespace Avalonia.Layout.UnitTests
Assert.Equal(0, target.DesiredSize.Height);
}
[Fact]
public void Margin_Should_Affect_AvailableSize()
{
MeasureTest target;
var outer = new Decorator
{
Width = 100,
Height = 100,
Child = target = new MeasureTest
{
Margin = new Thickness(10),
}
};
outer.Measure(Size.Infinity);
Assert.Equal(new Size(80, 80), target.AvailableSize);
}
[Fact]
public void Margin_Should_Be_Applied_Before_Width_Height()
{
MeasureTest target;
var outer = new Decorator
{
Width = 100,
Height = 100,
Child = target = new MeasureTest
{
Width = 80,
Height = 80,
Margin = new Thickness(10),
}
};
outer.Measure(Size.Infinity);
Assert.Equal(new Size(80, 80), target.AvailableSize);
}
class MeasureTest : Control
{
public Size? AvailableSize { get; private set; }
protected override Size MeasureOverride(Size availableSize)
{
AvailableSize = availableSize;
return availableSize;
}
}
}
}

Loading…
Cancel
Save