CustomDrawDayNumberCellEventArgs Class

Provides data for the DateEdit.DrawItem event.

Namespace: DevExpress.XtraEditors.Calendar

Assembly: DevExpress.XtraEditors.v20.1.dll


public class CustomDrawDayNumberCellEventArgs :
Public Class CustomDrawDayNumberCellEventArgs
    Inherits EventArgs


The DateEdit.DrawItem event gives you the ability to custom paint day number cells in the DateEdit's dropdown calendar. The CustomDrawDayNumberCellEventArgs class introduces properties which allow you to obtain data needed to paint a day number cell. The CustomDrawDayNumberCellEventArgs.Handled property specifies whether default painting is prohibited. It must be set to true so that day number cell custom painting implemented in the event handler can take effect.

CustomDrawDayNumberCellEventArgs objects are automatically created and passed to the DateEdit.DrawItem event handlers.


The following example handles the DateEdit.DrawItem event to custom paint non-working days within the dropdown calendar. These days are painted red (non-working days which don't belong to the currently displayed month are painted light pink).

The following image shows the result.


using DevExpress.XtraEditors.Calendar;

private bool IsHoliday(DateTime dt) {
   //the specified date is a Saturday or Holiday
   if(dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday) return true;
   //New Year's Day
   if(dt.Day == 1 && dt.Month == 1) return true;
   //Inauguration Day
   if(dt.Year >= 1789 && (dt.Year - 1789) % 4 == 0) {
      if(dt.Day == 20 && dt.Month == 1) return true;
   //Independence Day
   if(dt.Day == 4 && dt.Month == 7) return true;
   //Veterans Day
   if(dt.Day == 11 && dt.Month == 11) return true;
   if(dt.Day == 25 && dt.Month == 12) return true;
   return false;
private void dateEdit1_DrawItem(object sender, CustomDrawDayNumberCellEventArgs e) {
    if (e.View != DevExpress.XtraEditors.Controls.DateEditCalendarViewType.MonthInfo) return;
    //return if a given date is not a holiday
    //in this case the default drawing will be performed (e.Handled is false)
    if (!IsHoliday(e.Date)) return;
    //highlight the selected and hot-tracked dates
    bool isHotTracked = e.State == DevExpress.Utils.Drawing.ObjectState.Hot;
    if (e.Selected || isHotTracked) {
        e.Graphics.FillRectangle(e.Style.GetBackBrush(e.Cache), e.Bounds);
    //the brush for painting days
    Brush brush = (e.Inactive ? Brushes.LightPink : Brushes.Red);
    //specify formatting attributes for drawing text
    StringFormat strFormat = new StringFormat();
    strFormat.Alignment = StringAlignment.Center;
    strFormat.LineAlignment = StringAlignment.Center;
    //draw the day number
    e.Graphics.DrawString(e.Date.Day.ToString(), e.Style.Font, brush, e.Bounds, strFormat);
    //no default drawing is required
    e.Handled = true;


See Also