Делаю как тут написано:
А именно:
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
if ((e.State & ListViewItemStates.Selected) != 0)
{
e.Graphics.FillRectangle(Brushes.Blue, e.Bounds);
}
Почему синим рисуется фон всех элементов, а не только выделенных?
Точнее даже, вот так было бы правильнее:
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
bool selected = (e.State & ListViewItemStates.Selected) == ListViewItemStates.Selected;
e.Graphics.FillRectangle(selected ? Brushes.Blue : Brushes.White, e.Bounds);
}
Но всё-равно все строчки синие
А режим OwnerDraw то поставили??
Конечно поставил. Без него оно бы стандартным способом отрисовывалось.
Может ещё что-то надо сделать?
Решил проблему следующим способом:
private void listViewStreams_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
try
{
using (StringFormat sf = new StringFormat())
{
switch (e.Header.TextAlign)
{
case HorizontalAlignment.Center:
sf.Alignment = StringAlignment.Center;
break;
case HorizontalAlignment.Right:
sf.Alignment = StringAlignment.Far;
break;
}
bool selected = listViewStreams.SelectedIndices.Count > 0 && listViewStreams.SelectedIndices[0] == e.ItemIndex;
e.Graphics.FillRectangle(selected ? Brushes.Blue : Brushes.White, e.Bounds);
StreamItem streamItem = listViewStreams.Items[e.ItemIndex].Tag as StreamItem;
Brush brush = streamItem.IsImportant && e.ColumnIndex == 0 ? Brushes.Red : Brushes.Black;
e.Graphics.DrawString(e.SubItem.Text, listViewStreams.Font, brush, e.Bounds, sf);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.StackTrace);
}
}
DrawItem
вообще не нужен.
Только теперь он, почему-то, длинные строчки переносит Из-за этого они друг на друга накладываются.
Как отключить перенос?
sf.FormatFlags |= StringFormatFlags.NoWrap;