Skip to content

Scheduler | Calendar View

A monthly calendar grid with swipe navigation and event dots/summaries per day cell. Tap a day to select it, swipe left/right to navigate months.

<scheduler:SchedulerCalendarView
Provider="{Binding Provider}"
SelectedDate="{Binding SelectedDate}"
DisplayMonth="{Binding DisplayMonth}"
MaxEventsPerCell="3"
FirstDayOfWeek="Sunday"
CalendarCellColor="White"
CalendarCellSelectedColor="LightBlue"
CurrentDayColor="DodgerBlue" />
PropertyTypeDefaultDescription
ProviderISchedulerEventProvider?nullEvent data source
SelectedDateDateOnlyTodayTwo-way bound selected date
DisplayMonthDateOnlyTodayTwo-way bound display month
MinDateDateOnly?nullEarliest navigable date
MaxDateDateOnly?nullLatest navigable date
ShowCalendarCellEventCountOnlyboolfalseShow count badge instead of event items
EventItemTemplateDataTemplate?nullCustom template for event items in cells
OverflowItemTemplateDataTemplate?nullCustom template for “+N more” overflow
LoaderTemplateDataTemplate?nullCustom loading indicator
MaxEventsPerCellint3Max events shown per cell before overflow
CalendarCellColorColorWhiteBackground color of day cells
CalendarCellSelectedColorColorLightBlueBackground of selected day
CurrentDayColorColorDodgerBlueAccent color for today
FirstDayOfWeekDayOfWeekSundayFirst day of the week
AllowPanbooltrueEnable swipe navigation between months
AllowZoombooltrueEnable pinch-to-zoom on calendar grid
  • Month navigation via arrow buttons and swipe left/right
  • Tap a day cell to select it — updates SelectedDate (two-way)
  • Events grouped by date with color indicators
  • When a cell has more events than MaxEventsPerCell, an overflow indicator appears (“+N more”)
  • All-day events sort to top within each cell
  • MinDate/MaxDate prevent navigation and selection outside bounds

The EventItemTemplate binds to SchedulerEvent. The default shows a colored bar with the event title.

CalendarView.EventItemTemplate = new DataTemplate(() =>
{
var label = new Label { FontSize = 10, LineBreakMode = LineBreakMode.TailTruncation };
label.SetBinding(Label.TextProperty, static (SchedulerEvent e) => e.Title);
label.SetBinding(Label.TextColorProperty, static (SchedulerEvent e) => e.Color);
return label;
});

The OverflowItemTemplate binds to CalendarOverflowContext:

public class CalendarOverflowContext
{
public int EventCount { get; set; }
public DateOnly Date { get; set; }
}
CalendarView.OverflowItemTemplate = new DataTemplate(() =>
{
var label = new Label { FontSize = 10, TextColor = Colors.Gray };
label.SetBinding(Label.TextProperty,
static (CalendarOverflowContext c) => c.EventCount,
converter: new FuncConverter<int, string>(count => $"+{count} more"));
return label;
});