Fix some rendering issues in calendar with all day events.

This commit is contained in:
Burak Kaan Köse
2026-04-07 21:49:23 +02:00
parent 71fc883e47
commit 1567d9fa5e
3 changed files with 16 additions and 7 deletions
@@ -53,7 +53,7 @@
<Grid x:Name="TimedRoot" Visibility="Collapsed">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="{x:Bind helpers:XamlHelpers.DoubleToGridLength(TimedAllDayHeight), Mode=OneWay}" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
@@ -349,12 +349,14 @@ public sealed partial class CalendarPeriodControl : UserControl, INotifyProperty
TimedDayWidth)));
var eventTemplate = (DataTemplate)Resources["CalendarEventTemplate"];
ReplaceCollection(TimedAllDayItemsCollection, TimedCalendarLayoutCalculator.CalculateAllDayItems(_currentRange, CurrentItems, timedSurfaceWidth).Select(item =>
{
PrepareDisplayMetadata(item.Item, item.Date);
item.Template = eventTemplate;
return item;
}));
ReplaceCollection(TimedItemsCollection, _timedLayout.Items.Select(item =>
{
PrepareDisplayMetadata(item.Item, item.Date);
@@ -365,9 +367,11 @@ public sealed partial class CalendarPeriodControl : UserControl, INotifyProperty
RenderTimedAllDayItems();
RenderTimedItems();
TimedAllDayCanvas.Invalidate();
TimedHeaderCanvas.Invalidate();
TimedStructureCanvas.Invalidate();
TimedAllDayCanvas.Invalidate();
TimedAllDayHost.InvalidateArrange();
}
private void RefreshMonthView()
@@ -977,7 +981,9 @@ public sealed partial class CalendarPeriodControl : UserControl, INotifyProperty
private void ResetTimedVisualState()
{
ResetAnimatedElement(TimedScrollViewer);
ResetAnimatedElement(TimedAllDayHost);
// TODO: This is buggy.
// ResetAnimatedElement(TimedAllDayHost);
}
private static void StartNavigationTransition(Compositor compositor, Visual visual, int direction, double width)
@@ -1009,7 +1015,8 @@ public sealed partial class CalendarPeriodControl : UserControl, INotifyProperty
StartTimedElementTransition(compositor, TimedScrollViewer, signedTravel, 0f, 0.68f, TimeSpan.FromMilliseconds(240), direction >= 0 ? 0f : clipInset, direction >= 0 ? clipInset : 0f, animateScale: false);
if (HasTimedAllDayItems)
{
StartTimedElementTransition(compositor, TimedAllDayHost, signedTravel, 0f, 0.68f, TimeSpan.FromMilliseconds(240), direction >= 0 ? 0f : clipInset, direction >= 0 ? clipInset : 0f, animateScale: false);
// TODO: This is buggy.
// StartTimedElementTransition(compositor, TimedAllDayHost, signedTravel, 0f, 0.68f, TimeSpan.FromMilliseconds(240), direction >= 0 ? 0f : clipInset, direction >= 0 ? clipInset : 0f, animateScale: false);
}
}
@@ -1040,7 +1047,8 @@ public sealed partial class CalendarPeriodControl : UserControl, INotifyProperty
StartTimedElementTransition(compositor, TimedScrollViewer, 0f, 18f, 0f, TimeSpan.FromMilliseconds(240), 0f, 0f, animateScale: false);
if (HasTimedAllDayItems)
{
StartTimedElementTransition(compositor, TimedAllDayHost, 0f, 18f, 0f, TimeSpan.FromMilliseconds(240), 0f, 0f, animateScale: false);
// TODO: This is buggy.
// StartTimedElementTransition(compositor, TimedAllDayHost, 0f, 18f, 0f, TimeSpan.FromMilliseconds(240), 0f, 0f, animateScale: false);
}
}
@@ -1059,7 +1067,8 @@ public sealed partial class CalendarPeriodControl : UserControl, INotifyProperty
StartOpacityTransition(compositor, ElementCompositionPreview.GetElementVisual(TimedScrollViewer), 0.8f, TimeSpan.FromMilliseconds(160));
if (HasTimedAllDayItems)
{
StartOpacityTransition(compositor, ElementCompositionPreview.GetElementVisual(TimedAllDayHost), 0.8f, TimeSpan.FromMilliseconds(160));
// TODO: This is buggy.
// StartOpacityTransition(compositor, ElementCompositionPreview.GetElementVisual(TimedAllDayHost), 0.8f, TimeSpan.FromMilliseconds(160));
}
}
@@ -29,7 +29,7 @@ internal sealed record TimedCalendarLayoutResult(IReadOnlyList<DateOnly> Visible
internal static class TimedCalendarLayoutCalculator
{
private const double AllDayItemHeight = 28d;
private const double AllDayItemHeight = 32d;
private const double AllDayItemGap = 4d;
private const double AllDaySectionPadding = 6d;