Skip to content

Commit 5198744

Browse files
authored
Fixed ReversibleStackPanel not invalidating arrange on ReverseOrder change (#20172)
* Added unit tests for ReversibleStackPanel (#20171) * Invalidates_Arrange_On_Reverse_Order_Change fails. * Fixed ReversibleStackPanel not invalidating arrange on ReverseOrder change (#20171)
1 parent 0b5a828 commit 5198744

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

src/Avalonia.Controls/Notifications/ReversibleStackPanel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public bool ReverseOrder
2424
set => SetValue(ReverseOrderProperty, value);
2525
}
2626

27+
static ReversibleStackPanel()
28+
{
29+
AffectsArrange<ReversibleStackPanel>(ReverseOrderProperty);
30+
}
31+
2732
/// <inheritdoc/>
2833
protected override Size ArrangeOverride(Size finalSize)
2934
{
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using Avalonia.UnitTests;
2+
using Xunit;
3+
4+
namespace Avalonia.Controls.UnitTests
5+
{
6+
public class ReversibleStackPanelTests : ScopedTestBase
7+
{
8+
[Fact]
9+
public void Arranges_In_Reverse_Order()
10+
{
11+
var target = new ReversibleStackPanel
12+
{
13+
ReverseOrder = true,
14+
Children =
15+
{
16+
new Border { Height = 30, Width = 10 },
17+
new Border { Height = 50 },
18+
}
19+
};
20+
21+
target.Measure(Size.Infinity);
22+
target.Arrange(new Rect(target.DesiredSize));
23+
24+
Assert.Equal(new Rect(0, 50, 10, 30), target.Children[0].Bounds);
25+
Assert.Equal(new Rect(0, 0, 10, 50), target.Children[1].Bounds);
26+
}
27+
28+
[Fact]
29+
public void Invalidates_Arrange_On_Reverse_Order_Change()
30+
{
31+
var target = new ReversibleStackPanel
32+
{
33+
Children =
34+
{
35+
new Border(),
36+
new Border(),
37+
}
38+
};
39+
40+
target.Measure(Size.Infinity);
41+
target.Arrange(new Rect(target.DesiredSize));
42+
target.ReverseOrder = true;
43+
44+
Assert.True(target.IsMeasureValid);
45+
Assert.False(target.IsArrangeValid);
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)