Skip to content

Commit 1589851

Browse files
committed
feat(calendar): Enable auto scrolling to today
1 parent c7896da commit 1589851

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/Uno.UI/Microsoft/UI/Xaml/Controls/CalendarView/CalendarView_Partial.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ private void ScrollToDate(
16171617
index = pHost.CalculateOffsetFromMinDate(date);
16181618
Debug.Assert(index >= 0);
16191619
Debug.Assert(pHost.Panel is {});
1620-
pHost.Panel.ScrollItemintoView(
1620+
pHost.Panel.ScrollItemIntoView(
16211621
index,
16221622
ScrollIntoViewAlignment.Leading,
16231623
0.0 /* offset */,

src/Uno.UI/Microsoft/UI/Xaml/Controls/CalendarView/Primitives/CalendarPanel.ModernCollectionBasePanel.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ internal IEnumerable<CacheEntry> CompleteGeneration(int endIndex)
112112
if (unexpectedUnusedEntries.count > 0)
113113
{
114114
// If actually all entries have been recycled, some entries might be part of the recyclable head.
115-
unexpectedUnusedEntries.at = Math.Max(_generationRecyclableBefore.at, _generationRecyclableAfter.at - unexpectedUnusedEntries.count);
115+
unexpectedUnusedEntries.at = Math.Max(_generationRecyclableBefore.at + _generationRecyclableBefore.count, _generationRecyclableAfter.at - unexpectedUnusedEntries.count);
116116
unexpectedUnusedEntries.count = Math.Min(unexpectedUnusedEntries.count, _entries.Count - unexpectedUnusedEntries.at);
117117
}
118118

@@ -354,14 +354,19 @@ internal void DisconnectItemsHost()
354354
internal DependencyObject? ContainerFromIndex(int index)
355355
=> _cache.ContainerFromIndex(index);
356356

357-
[NotImplemented]
358-
internal void ScrollItemintoView(int index, ScrollIntoViewAlignment alignment, double offset, bool forceSynchronous)
359-
{
360-
}
361-
362-
[NotImplemented]
363357
internal void ScrollItemIntoView(int index, ScrollIntoViewAlignment alignment, double offset, bool forceSynchronous)
364358
{
359+
if (_layoutStrategy is null)
360+
{
361+
return;
362+
}
363+
364+
_layoutStrategy.EstimateElementBounds(ElementType.ItemContainer, index, default, default, default, out var bounds);
365+
366+
Owner?.ScrollViewer?.ChangeView(
367+
horizontalOffset: null,
368+
verticalOffset: bounds.Y + offset,
369+
zoomFactor: null);
365370
}
366371

367372
private Size GetViewportSize()

0 commit comments

Comments
 (0)