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