Я пытаюсь добавить еще несколько значков к элементам стандартного элемента управления System.Windows.Forms.TreeView.
Мой план состоял в том, чтобы изменить только область метки элемента управления древовидной структуры, но это показывает странное поведение. Если я щелкну узел, чтобы выбрать его, когда кнопка мыши нажата, фон будет отображаться правильно с цветом выделения. Однако текст имеет неправильный невыбранный цвет, пока я не отпущу кнопку мыши. Как будто e.State
содержит неправильное состояние между нажатием и отпусканием кнопки мыши.
Вот что я делаю: я инициализирую с помощью this.DrawMode = TreeViewDrawMode.OwnerDrawText
, а затем регистрирую свой обработчик событий с помощью this.DrawNode += LayoutTreeView_DrawNode
. Вот обработчик:
void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
Color color = (e.State & TreeNodeStates.Selected) != 0 ?
SystemColors.HighlightText : SystemColors.WindowText;
TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.SingleLine |
TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis;
TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, color, flags);
}
Если я установлю обработчик в его случае по умолчанию...
void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DefaultDraw = true;
}
... происходит то же самое, что странно, поскольку Windows фактически рисует это сейчас. Такое поведение характерно для Windows XP с .Net 3.5.
Есть ли способ обойти это странное поведение?