Browse Source

Fix layout bug with ScrollViewer.

When calling Measure from Arrange, use previous measure constraint if
available.
pull/387/merge
Steven Kirk 10 years ago
parent
commit
d8725286aa
  1. 4
      src/Perspex.Layout/Layoutable.cs
  2. 13
      tests/Perspex.Layout.UnitTests/ArrangeTests.cs

4
src/Perspex.Layout/Layoutable.cs

@ -359,11 +359,9 @@ namespace Perspex.Layout
throw new InvalidOperationException("Invalid Arrange rectangle.");
}
// If the measure was invalidated during an arrange pass, wait for the measure pass to
// be re-run.
if (!IsMeasureValid)
{
Measure(rect.Size);
Measure(_previousMeasure ?? rect.Size);
}
if (!IsArrangeValid || _previousArrange != rect)

13
tests/Perspex.Layout.UnitTests/ArrangeTests.cs

@ -19,6 +19,19 @@ namespace Perspex.Layout.UnitTests
Assert.Equal(new Size(120, 120), target.MeasureConstraint);
}
[Fact]
public void Arrange_With_IsMeasureValid_False_Calls_Measure_With_Previous_Size_If_Available()
{
var target = new TestControl();
Assert.False(target.IsMeasureValid);
target.Arrange(new Rect(0, 0, 120, 120));
target.InvalidateMeasure();
target.Arrange(new Rect(0, 0, 100, 100));
Assert.True(target.IsMeasureValid);
Assert.Equal(new Size(120, 120), target.MeasureConstraint);
}
private class TestControl : Border
{
public Size MeasureConstraint { get; private set; }

Loading…
Cancel
Save