uwekeim icon

Alternating row colors in DevExpress PropertyGridControl

uwekeim | PRO | 11/19/13 07:22:35 AM UTC | 0 ⭐ | 918 👁️ | Never ⏰ | []
C# |

3.89 KB

|

None

|

0 👍

/

0 👎

namespace ExtendedControlsLibrary.Skinning.CustomPropertyGrid
{
    // See the DevExpress suport question:
    // https://www.devexpress.com/Support/Center/Question/Details/Q539013
 
    using System.ComponentModel;
    using System.Drawing;
    using DevExpress.Utils;
    using DevExpress.XtraVerticalGrid;
    using DevExpress.XtraVerticalGrid.Events;
    using DevExpress.XtraVerticalGrid.Rows;
    using DevExpress.XtraVerticalGrid.ViewInfo;
 
    public class MyPropertyGridControl :
        PropertyGridControl
    {
        private bool _wantAlternatingRows;
        private bool _eventConnected;
        private AppearanceObject _alternatingRowStyle;
        private AppearanceObject _normalRowStyle;
 
        [DefaultValue(false)]
        public bool WantAlternatingRows
        {
            get { return _wantAlternatingRows; }
            set
            {
                _wantAlternatingRows = value;
                checkConnectEvent();
            }
        }
 
        private void checkConnectEvent()
        {
            if (!_eventConnected)
            {
                _eventConnected = true;
                _alternatingRowStyle = new AppearanceObject
                {
                    BackColor = SkinHelper.AlternatingGridRowColors
                };
 
                CustomDrawRowHeaderCell += MyPropertyGridControl_CustomDrawRowHeaderCell;
                CustomDrawRowValueCell += MyPropertyGridControl_CustomDrawRowValueCell;
                CustomDrawRowHeaderIndent += MyPropertyGridControl_CustomDrawRowHeaderIndent;
                CustomDrawTreeButton += MyPropertyGridControl_CustomDrawTreeButton;
            }
        }
 
        private void MyPropertyGridControl_CustomDrawTreeButton(object sender, CustomDrawTreeButtonEventArgs e)
        {
            applyDrawing(e);
        }
 
        private void MyPropertyGridControl_CustomDrawRowHeaderIndent(
            object sender, CustomDrawRowHeaderIndentEventArgs e)
        {
            if (applyDrawing(e))
            {
                if (e.Row.VisibleIndex%2 == 0)
                {
                    foreach (IndentInfo info in e.RowIndents)
                    {
                        info.Style.Combine(_alternatingRowStyle);
                    }
                }
                else
                {
                    foreach (IndentInfo info in e.RowIndents)
                    {
                        info.Style.Combine(checkGetNormalRowStyle(e.Row));
                    }
                }
            }
        }
 
        private void MyPropertyGridControl_CustomDrawRowHeaderCell(
            object sender, CustomDrawRowHeaderCellEventArgs e)
        {
            applyDrawing(e);
        }
 
        private void MyPropertyGridControl_CustomDrawRowValueCell(
            object sender, CustomDrawRowValueCellEventArgs e)
        {
            applyDrawing(e);
        }
 
        private bool applyDrawing(CustomDrawRowEventArgs e)
        {
            if (WantAlternatingRows && !(e.Row is CategoryRow) && FocusedRow != e.Row)
            {
                if (e.Row.VisibleIndex%2 == 0)
                {
                    e.Appearance.Combine(_alternatingRowStyle);
                }
                else
                {
                    e.Appearance.Combine(checkGetNormalRowStyle(e.Row));
                }
 
                return true;
            }
            else
            {
                return false;
            }
        }
 
        private AppearanceObject checkGetNormalRowStyle(BaseRow row)
        {
            return _normalRowStyle ??
                   (_normalRowStyle = new AppearanceObject
                   {
                       BackColor =
                           row.Appearance.BackColor == Color.Empty ? SystemColors.Window : row.Appearance.BackColor
                   });
        }
    }
}

Comments