Skip to content
Client v5: BLE, BLE Hosting, HTTP, Jobs - Linux, MacOS, & Blazor Support! Full AOT, RX on BLE only & MANY other features! Check It Out

Scheduler | Blazor Usage

The Blazor Scheduler components mirror the MAUI controls. All three views — Calendar, Agenda, and Event List — are available with the same ISchedulerEventProvider interface.

Install the NuGet package:

Terminal window
dotnet add package Shiny.Blazor.Controls

Add the @using directives — typically in _Imports.razor:

@using Shiny.Blazor.Controls
@using Shiny.Blazor.Controls.Scheduler

The same ISchedulerEventProvider interface is used on both MAUI and Blazor:

public class MyEventProvider : ISchedulerEventProvider
{
public async Task<IReadOnlyList<SchedulerEvent>> GetEvents(
DateTimeOffset start, DateTimeOffset end)
{
return await myService.GetEventsAsync(start, end);
}
public void OnEventSelected(SchedulerEvent selectedEvent) { }
public bool CanCalendarSelect(DateOnly selectedDate) => true;
public void OnCalendarDateSelected(DateOnly selectedDate) { }
public void OnAgendaTimeSelected(DateTimeOffset selectedTime) { }
public bool CanSelectAgendaTime(DateTimeOffset selectedTime) => true;
}
<SchedulerCalendarView Provider="@provider"
SelectedDate="@selectedDate"
SelectedDateChanged="d => selectedDate = d"
CalendarCellColor="#FFFFFF"
CalendarCellSelectedColor="#DBEAFE"
CurrentDayColor="#3B82F6" />
@code {
ISchedulerEventProvider provider = new MyEventProvider();
DateOnly selectedDate = DateOnly.FromDateTime(DateTime.Today);
}

The Blazor agenda view has full feature parity with MAUI — multi-day columns, switchable date picker modes, additional timezone columns, overlap-aware side-by-side event layout, and an auto-updating current time marker (refreshes every minute without re-rendering the component).

<SchedulerAgendaView Provider="@provider"
@bind-SelectedDate="selectedDate"
DaysToShow="3"
DatePickerMode="AgendaDatePickerMode.Calendar"
ShowAdditionalTimezones="true"
AdditionalTimezones="additionalTimezones"
ShowCurrentTimeMarker="true"
CurrentTimeMarkerColor="#EF4444"
DefaultEventColor="#6366F1"
TimeSlotHeight="60"
Use24HourTime="false" />
@code {
ISchedulerEventProvider provider = new MyEventProvider();
DateOnly selectedDate = DateOnly.FromDateTime(DateTime.Today);
List<TimeZoneInfo> additionalTimezones = new()
{
TimeZoneInfo.FindSystemTimeZoneById("America/New_York")
};
}
ParameterTypeDefaultDescription
ProviderISchedulerEventProvider?nullEvent data source
SelectedDateDateOnlyTodayBindable via @bind-SelectedDate
DaysToShowint1Number of day columns (1–7, clamped)
ShowCarouselDatePickerbooltrueMaster toggle for the date picker
DatePickerModeAgendaDatePickerModeCarouselCarousel (horizontal day strip), Calendar (full month picker with ‹/› navigation and today highlight), or None
ShowAdditionalTimezonesboolfalseToggle extra timezone columns
AdditionalTimezonesIList<TimeZoneInfo>?nullExtra time columns with UTC offset labels (e.g. “UTC+05:30”)
ShowCurrentTimeMarkerbooltrueLive line at the current time
CurrentTimeMarkerColorstring#EF4444Time marker color
DefaultEventColorstring#6366F1Event color when the event has none
TimeSlotHeightdouble60.0Pixels per hour slot
MinDate / MaxDateDateOnly?nullSelection / navigation bounds
Use24HourTimebooltrue24-hour or AM/PM display
<SchedulerCalendarListView Provider="@provider"
@bind-SelectedDate="selectedDate"
DaysPerPage="30"
DefaultEventColor="#6366F1"
DayHeaderBackgroundColor="#F9FAFB"
DayHeaderTextColor="#111827" />
@code {
ISchedulerEventProvider provider = new MyEventProvider();
DateOnly selectedDate = DateOnly.FromDateTime(DateTime.Today);
}