Advertisement
uwekeim

Alternating row colors in DevExpress PropertyGridControl

Nov 19th, 2013
676
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.89 KB | None | 0 0
  1. namespace ExtendedControlsLibrary.Skinning.CustomPropertyGrid
  2. {
  3.     // See the DevExpress suport question:
  4.     // https://www.devexpress.com/Support/Center/Question/Details/Q539013
  5.  
  6.     using System.ComponentModel;
  7.     using System.Drawing;
  8.     using DevExpress.Utils;
  9.     using DevExpress.XtraVerticalGrid;
  10.     using DevExpress.XtraVerticalGrid.Events;
  11.     using DevExpress.XtraVerticalGrid.Rows;
  12.     using DevExpress.XtraVerticalGrid.ViewInfo;
  13.  
  14.     public class MyPropertyGridControl :
  15.         PropertyGridControl
  16.     {
  17.         private bool _wantAlternatingRows;
  18.         private bool _eventConnected;
  19.         private AppearanceObject _alternatingRowStyle;
  20.         private AppearanceObject _normalRowStyle;
  21.  
  22.         [DefaultValue(false)]
  23.         public bool WantAlternatingRows
  24.         {
  25.             get { return _wantAlternatingRows; }
  26.             set
  27.             {
  28.                 _wantAlternatingRows = value;
  29.                 checkConnectEvent();
  30.             }
  31.         }
  32.  
  33.         private void checkConnectEvent()
  34.         {
  35.             if (!_eventConnected)
  36.             {
  37.                 _eventConnected = true;
  38.                 _alternatingRowStyle = new AppearanceObject
  39.                 {
  40.                     BackColor = SkinHelper.AlternatingGridRowColors
  41.                 };
  42.  
  43.                 CustomDrawRowHeaderCell += MyPropertyGridControl_CustomDrawRowHeaderCell;
  44.                 CustomDrawRowValueCell += MyPropertyGridControl_CustomDrawRowValueCell;
  45.                 CustomDrawRowHeaderIndent += MyPropertyGridControl_CustomDrawRowHeaderIndent;
  46.                 CustomDrawTreeButton += MyPropertyGridControl_CustomDrawTreeButton;
  47.             }
  48.         }
  49.  
  50.         private void MyPropertyGridControl_CustomDrawTreeButton(object sender, CustomDrawTreeButtonEventArgs e)
  51.         {
  52.             applyDrawing(e);
  53.         }
  54.  
  55.         private void MyPropertyGridControl_CustomDrawRowHeaderIndent(
  56.             object sender, CustomDrawRowHeaderIndentEventArgs e)
  57.         {
  58.             if (applyDrawing(e))
  59.             {
  60.                 if (e.Row.VisibleIndex%2 == 0)
  61.                 {
  62.                     foreach (IndentInfo info in e.RowIndents)
  63.                     {
  64.                         info.Style.Combine(_alternatingRowStyle);
  65.                     }
  66.                 }
  67.                 else
  68.                 {
  69.                     foreach (IndentInfo info in e.RowIndents)
  70.                     {
  71.                         info.Style.Combine(checkGetNormalRowStyle(e.Row));
  72.                     }
  73.                 }
  74.             }
  75.         }
  76.  
  77.         private void MyPropertyGridControl_CustomDrawRowHeaderCell(
  78.             object sender, CustomDrawRowHeaderCellEventArgs e)
  79.         {
  80.             applyDrawing(e);
  81.         }
  82.  
  83.         private void MyPropertyGridControl_CustomDrawRowValueCell(
  84.             object sender, CustomDrawRowValueCellEventArgs e)
  85.         {
  86.             applyDrawing(e);
  87.         }
  88.  
  89.         private bool applyDrawing(CustomDrawRowEventArgs e)
  90.         {
  91.             if (WantAlternatingRows && !(e.Row is CategoryRow) && FocusedRow != e.Row)
  92.             {
  93.                 if (e.Row.VisibleIndex%2 == 0)
  94.                 {
  95.                     e.Appearance.Combine(_alternatingRowStyle);
  96.                 }
  97.                 else
  98.                 {
  99.                     e.Appearance.Combine(checkGetNormalRowStyle(e.Row));
  100.                 }
  101.  
  102.                 return true;
  103.             }
  104.             else
  105.             {
  106.                 return false;
  107.             }
  108.         }
  109.  
  110.         private AppearanceObject checkGetNormalRowStyle(BaseRow row)
  111.         {
  112.             return _normalRowStyle ??
  113.                    (_normalRowStyle = new AppearanceObject
  114.                    {
  115.                        BackColor =
  116.                            row.Appearance.BackColor == Color.Empty ? SystemColors.Window : row.Appearance.BackColor
  117.                    });
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement