Skip to main content

CalendarControlBase.CellStyleProvider Property

Gets or sets the ICalendarCellStyleProvider object that allows you to customize the appearance of certain dates.

Namespace: DevExpress.XtraEditors.Controls

Assembly: DevExpress.XtraEditors.v24.1.dll

NuGet Package: DevExpress.Win.Navigation


public ICalendarCellStyleProvider CellStyleProvider { get; set; }

Property Value

Type Default Description
DevExpress.XtraEditors.Controls.ICalendarCellStyleProvider null

The object that allows you to customize the appearance of certain dates.


When an ICalendarCellStyleProvider object is assigned to the CellStyleProvider property, the ICalendarCellStyleProvider.UpdateAppearance method is called before painting each cell in the calendar. Using this method, you can provide a custom appearance for certain dates.

See the Editors Main Demo for an example of customizing the appearance of dates in the CalendarControl.


This example shows how to create a custom CellStyleProvider object that customizes the cell appearance in the CalendarControl and DateEdit controls.Calendar cells that correspond to certain holiday dates are highlighted in a custom manner.


View Example

using DevExpress.Utils;
using DevExpress.Utils.Design;
using DevExpress.XtraEditors.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Calendar_CellStyleProvider {
    public partial class Form1 : Form {
        public Form1() {

        private void Form1_Load(object sender, EventArgs e) {
            dateEdit1.DateTime = calendarControl1.DateTime = new DateTime(2016, 12, 31);
            dateEdit1.Properties.CellStyleProvider = calendarControl1.CellStyleProvider = new CustomCellStyleProvider();

            ContextButton cb = new ContextButton() {
                Alignment = ContextItemAlignment.TopNear, Visibility=ContextItemVisibility.Hidden

            calendarControl1.CellSize = new Size(50, 50);
            calendarControl1.ContextButtonCustomize += CalendarControl1_ContextButtonCustomize;

        private void CalendarControl1_ContextButtonCustomize(object sender, CalendarContextButtonCustomizeEventArgs e) {
            string holidayText;
            if (Holidays.IsHoliday(e.Cell.Date, out holidayText)) {
                e.Item.Glyph = global::Calendar_CellStyleProvider.Properties.Resources.Party;
                e.Item.Visibility = ContextItemVisibility.Visible;
                e.Item.ToolTip = holidayText;
                e.Item.ShowToolTips = true;

    public static class Holidays {
        public static bool IsHoliday(DateTime dt, out string holidayText) {
            holidayText = "";
            //New Year's Day
            if (dt.Day == 1 && dt.Month == 1) holidayText = "New Year's Day";
            //Independence Day
            if (dt.Day == 4 && dt.Month == 7) holidayText = "Independence Day";
            //Veterans Day
            if (dt.Day == 11 && dt.Month == 11) holidayText = "Veterans Day";
            if (dt.Day == 25 && dt.Month == 12) holidayText = "Christmas";
            return !string.IsNullOrEmpty(holidayText);

    public class CustomCellStyleProvider : ICalendarCellStyleProvider {
        public void UpdateAppearance(CalendarCellStyle cell) {
            string holidayText;
            if(Holidays.IsHoliday(cell.Date, out holidayText)) {
                cell.Appearance.ForeColor = Color.Yellow;
                cell.Appearance.Font = new Font(cell.Appearance.Font, FontStyle.Bold);
                if (cell.Active)
                    cell.Appearance.BackColor = Color.HotPink;
                    cell.Appearance.BackColor = Color.LightPink;

The following code snippets (auto-collected from DevExpress Examples) contain references to the CellStyleProvider property.


The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

See Also