Skip to main content
A newer version of this page is available. .

TreeList.CustomDrawColumnHeader Event

Provides the ability to custom paint column headers and the column button.

Namespace: DevExpress.XtraTreeList

Assembly: DevExpress.XtraTreeList.v18.2.dll

Declaration

[DXCategory("CustomDraw")]
public event CustomDrawColumnHeaderEventHandler CustomDrawColumnHeader

Event Data

The CustomDrawColumnHeader event's data class is CustomDrawColumnHeaderEventArgs. The following properties provide information specific to this event:

Property Description
Appearance Gets the painted element’s appearance settings. Inherited from CustomDrawEventArgs.
Bounds Gets the painted element’s bounding rectangle. Inherited from CustomDrawEventArgs.
Cache Gets an object specifying the storage for the most used pens, fonts and brushes. Inherited from CustomDrawEventArgs.
Caption Gets or sets the text displayed within the painted column header.
CaptionRect Gets the rectangle where the column caption is intended to be drawn.
Column Gets the column whose header is painted.
ColumnInfo Gets an object containing information about the painted element.
ColumnType Gets a value indicating the type of element to be painted.
Graphics Gets an object used to paint. Inherited from CustomDrawEventArgs.
Handled Gets or sets a value specifying whether an event was handled and that the default element painting is therefore not required. Inherited from CustomDrawEventArgs.
HotTrack Gets a value indicating whether the painted column header is hot tracked.
IsRightToLeft Gets a value indicating whether the TreeList’s elements are aligned to support locales using right-to-left fonts. Inherited from CustomDrawEventArgs.
ObjectArgs Gets an object containing information about the painted element. Inherited from CustomDrawEventArgs.
Painter Gets the painter object that provides the default element’s painting mechanism. Inherited from CustomDrawEventArgs.
Pressed Gets a value indicating whether the painted element is pressed.
SortShapeRect Gets the rectangle where the image indicating sort order is intended to be drawn.

The event data class exposes the following methods:

Method Description
DefaultDraw() Performs default painting of an element. Inherited from CustomDrawEventArgs.

Remarks

The event’s parameters provide you all the information needed to paint either a column header or the column button. Use the event’s CustomDrawColumnHeaderEventArgs.ColumnType parameter to determine the kind of element to be drawn. Note that column headers are visible if the TreeListOptionsView.ShowColumns option is enabled. The column button is visible if both the TreeListOptionsView.ShowColumns and TreeListOptionsView.ShowIndicator options are active.

See the Custom Draw Scenarios topic for information on using custom draw events.

Important

Never change cell values or modify the control’s layout on this event, or any other event designed to tune the control’s appearance. Any action that causes a layout update can cause the control to malfunction.

Example

The following sample code shows how to handle the TreeList.CustomDrawColumnHeader event to paint the focused column’s caption using a bold font. Note that no manual painting is performed in the TreeList.CustomDrawColumnHeader event handler. The event is used to modify the appearance of painted column headers.

In the example, the TreeList.FocusedColumnChanged event is handled to force column header repainting on navigating through columns (by default, column headers are not repainted on column navigation).

The image below displays the result of the sample code execution. The focused column is painted with a bold caption.

Invalidate - ColumnHeader

using DevExpress.XtraTreeList;
using DevExpress.Utils;

private void treeList1_CustomDrawColumnHeader(object sender, DevExpress.XtraTreeList.CustomDrawColumnHeaderEventArgs e) {
    if (e.ColumnType == HitInfoType.ColumnButton || e.ColumnType == HitInfoType.BehindColumn) return;
    if (e.Column == (sender as TreeList).FocusedColumn)
        e.Appearance.FontStyleDelta = FontStyle.Bold;
    else
        e.Appearance.FontStyleDelta = FontStyle.Regular;
}

private void treeList1_FocusedColumnChanged(object sender, FocusedColumnChangedEventArgs e) {
    TreeList tl = sender as TreeList;
    tl.InvalidateColumnHeader(e.Column);
    tl.InvalidateColumnHeader(e.OldColumn);
}

Example

The following sample code handles the TreeList.CustomDrawColumnHeader event to perform custom painting of column headers. Column headers are drawn differently for the normal, pressed and hot tracked states. The CustomDrawColumnHeaderEventArgs.Pressed and CustomDrawColumnHeaderEventArgs.HotTrack properties are used to identify the column header’s current state.

CustomDraw - ColumnHeader

using System.Drawing;
using System.Drawing.Drawing2D;
using DevExpress.XtraTreeList;

private void treeList1_CustomDrawColumnHeader(object sender, 
CustomDrawColumnHeaderEventArgs e) {
   // column button custom painting is not performed
   if (e.ColumnType == HitInfoType.ColumnButton) return;

   Brush backBrush;
   // determining the brush used to fill column headers background regerding to their state
   if (e.Pressed) 
      backBrush = e.Cache.GetGradientBrush(e.Bounds, Color.Gray, Color.Silver, 
        LinearGradientMode.Vertical);
   else if (e.HotTrack)
      backBrush = e.Cache.GetGradientBrush(e.Bounds, Color.Silver, Color.Gray, 
         LinearGradientMode.Vertical);
   else 
      backBrush = e.Cache.GetGradientBrush(e.Bounds, Color.DeepSkyBlue, Color.Blue, 
        LinearGradientMode.Vertical);
   // filling the background
   e.Cache.FillRectangle(backBrush, e.Bounds);
   // painting borders
   e.Cache.DrawRectangle(e.Cache.GetPen(Color.LightGray), e.Bounds);
   // painting column headers captions
     e.Cache.DrawString(e.Caption, e.Appearance.Font, e.Cache.GetSolidBrush(Color.White),
       e.CaptionRect, e.Appearance.GetStringFormat());

   // prohibiting default painting
   e.Handled = true;
}

The following code snippet (auto-collected from DevExpress Examples) contains a reference to the CustomDrawColumnHeader event.

Note

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