|
|
|
@ -477,7 +477,55 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
var result = converter.Convert(args, typeof(ScrollBarVisibility), "0", System.Globalization.CultureInfo.CurrentCulture); |
|
|
|
Assert.Equal(true, result); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void ScrollBar_Visibility_Should_Invalidate_Measure_And_Arrange() |
|
|
|
{ |
|
|
|
var panel = new TestPanel() |
|
|
|
{ |
|
|
|
DesiredWidth = 100_000 |
|
|
|
}; |
|
|
|
var target = new ScrollViewer |
|
|
|
{ |
|
|
|
Content = panel, |
|
|
|
Template = new FuncControlTemplate<ScrollViewer>(CreateTemplate), |
|
|
|
HorizontalScrollBarVisibility = ScrollBarVisibility.Auto |
|
|
|
}; |
|
|
|
var root = new TestRoot(target); |
|
|
|
root.LayoutManager.ExecuteInitialLayoutPass(); |
|
|
|
panel.Reset(); |
|
|
|
|
|
|
|
target.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; |
|
|
|
root.LayoutManager.ExecuteLayoutPass(); |
|
|
|
Assert.Equal(1, panel.MeasureOverrideCalls); |
|
|
|
Assert.Equal(1, panel.ArrangeOverrideCalls); |
|
|
|
} |
|
|
|
|
|
|
|
public class TestPanel : Panel |
|
|
|
{ |
|
|
|
public int DesiredWidth { get; set; } |
|
|
|
public int MeasureOverrideCalls { get; private set; } |
|
|
|
public int ArrangeOverrideCalls { get; private set; } |
|
|
|
|
|
|
|
protected override Size MeasureOverride(Size availableSize) |
|
|
|
{ |
|
|
|
MeasureOverrideCalls++; |
|
|
|
return new Size(DesiredWidth, 1); |
|
|
|
} |
|
|
|
|
|
|
|
protected override Size ArrangeOverride(Size finalSize) |
|
|
|
{ |
|
|
|
ArrangeOverrideCalls++; |
|
|
|
return base.ArrangeOverride(finalSize); |
|
|
|
} |
|
|
|
|
|
|
|
public void Reset() |
|
|
|
{ |
|
|
|
MeasureOverrideCalls = 0; |
|
|
|
ArrangeOverrideCalls = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private Point GetRootPoint(Visual control, Point p) |
|
|
|
{ |
|
|
|
if (control.GetVisualRoot() is Visual root && |
|
|
|
|