Browse Source

Fix missing Orientation check in VirtualizingStackPanel > CalculateMeasureViewport

pull/17135/head
dbriard 2 years ago
parent
commit
2a1ab0498e
  1. 10
      src/Avalonia.Controls/VirtualizingStackPanel.cs

10
src/Avalonia.Controls/VirtualizingStackPanel.cs

@ -165,7 +165,7 @@ namespace Avalonia.Controls
// We handle horizontal and vertical layouts here so X and Y are abstracted to:
// - Horizontal layouts: U = horizontal, V = vertical
// - Vertical layouts: U = vertical, V = horizontal
var viewport = CalculateMeasureViewport(items);
var viewport = CalculateMeasureViewport(orientation, items);
// If the viewport is disjunct then we can recycle everything.
if (viewport.viewportIsDisjunct)
@ -449,15 +449,15 @@ namespace Avalonia.Controls
return _realizedElements?.Elements ?? Array.Empty<Control>();
}
private MeasureViewport CalculateMeasureViewport(IReadOnlyList<object?> items)
private MeasureViewport CalculateMeasureViewport(Orientation orientation, IReadOnlyList<object?> items)
{
Debug.Assert(_realizedElements is not null);
var viewport = _viewport;
// Get the viewport in the orientation direction.
var viewportStart = Orientation == Orientation.Horizontal ? viewport.X : viewport.Y;
var viewportEnd = Orientation == Orientation.Horizontal ? viewport.Right : viewport.Bottom;
var viewportStart = orientation == Orientation.Horizontal ? viewport.X : viewport.Y;
var viewportEnd = orientation == Orientation.Horizontal ? viewport.Right : viewport.Bottom;
// Get or estimate the anchor element from which to start realization. If we are
// scrolling to an element, use that as the anchor element. Otherwise, estimate the
@ -468,7 +468,7 @@ namespace Avalonia.Controls
if (_scrollToIndex >= 0 && _scrollToElement is not null)
{
anchorIndex = _scrollToIndex;
anchorU = _scrollToElement.Bounds.Top;
anchorU = orientation == Orientation.Horizontal ? _scrollToElement.Bounds.Left : _scrollToElement.Bounds.Top;
}
else
{

Loading…
Cancel
Save