ListView OwnerDraw выделенный элемент

Делаю как тут написано:

А именно:


        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);
        }

Но всё-равно все строчки синие :man_shrugging:

А режим 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 вообще не нужен.
Только теперь он, почему-то, длинные строчки переносит :thinking: Из-за этого они друг на друга накладываются.
Как отключить перенос?

sf.FormatFlags |= StringFormatFlags.NoWrap;