Автор: Lenoks
Дата сообщения: 20.07.2006 09:47
Пожалуйста, подскажите кто знает:
Задача следующая:
Я хочу задать пользовательскую прорисовку заголовка, так как все существующие стили меня не устраивают (хочу использовать стиль Flat, но при этом чтобы заголовки столбцов остались плоскими (в стиле UltraFlat)). Кроме того задаю свою иконку для сортировки и ХОЧУ ЗАДАТЬ СОБСТВЕННУЮ ИКОНКУ ДЛЯ ФИЛЬТРАЦИИ (при наведении курсора мыши на любой заголовок столбца в верхнем правом углу отображается иконка фильтрации, при покидании заголовка исчезает. Если к столбцу применен фильтр, то иконка будет видна, до тех пор пока по данному столбцу фильтр не отменят).
Делаю следующее:
private void advBandedGridView1_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
{
if (e.Column != null)
{
Rectangle r = e.Info.CaptionRect;
StringFormat sf = new StringFormat();
sf.Trimming = StringTrimming.EllipsisCharacter;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
e.Info.Caption = "";
Rectangle sortBounds = Rectangle.Empty;
Rectangle filterBounds = Rectangle.Empty;
//Прорисовываю иконки для фильтрации
try
{
UpdateInnerElements(e, false, ref sortBounds);
}
finally
{
UpdateInnerElements(e, true, ref sortBounds);
}
if (!sortBounds.IsEmpty)
{
if (e.Column.SortOrder == ColumnSortOrder.None) return;
int i = 1;
if (e.Column.SortOrder == ColumnSortOrder.Descending) i = 0;
e.Graphics.DrawImageUnscaled(SortingGlyphsImageList.Images[i], r.X - 5 + (e.Column.Width - SortingGlyphsImageList.ImageSize.Width), r.Y + (r.Height - SortingGlyphsImageList.ImageSize.Height));
}
//Если к колонке применен фильтр, тогда иконка отображается
if (e.Column.FilterInfo.Type != DevExpress.XtraGrid.Columns.ColumnFilterType.None)
e.Graphics.DrawImageUnscaled(SortingGlyphsImageList.Images[2], r.X - 5 + (e.Column.Width - SortingGlyphsImageList.ImageSize.Width), r.Y);
}
e.Graphics.DrawString(e.Column.Caption, e.Appearance.Font, Brushes.White, new Rectangle(r.X - 3, r.Y - 2, e.Column.Width, r.Height + 2), sf);
e.Graphics.DrawRectangle(Pens.White, new Rectangle(r.X - 5, r.Y - 2, e.Column.Width, r.Height + 4));
}
e.Handled = true;
}
private void UpdateInnerElements(DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e, bool restore, ref Rectangle sortBounds)
{
foreach (DevExpress.Utils.Drawing.DrawElementInfo item in e.Info.InnerElements)
if (item.ElementPainter is DevExpress.Utils.Drawing.SortedShapeObjectPainter)
if (restore)
item.ElementInfo.Bounds = sortBounds;
else
{
sortBounds = item.ElementInfo.Bounds;
item.ElementInfo.Bounds = Rectangle.Empty;
}
}
Как сделать, чтобы иконка фильтрации появлялась/исчезала при наведении/покидании курсора мыши на заголовок столбца?