C# ToolStripPanel Рисование Вопрос

Я пытаюсь заставить ToolStripPanel иметь тот же стиль рисования, что и встроенные ToolStrips, чтобы он выглядел как одна непрерывная полоса. У меня есть ToolStrips, использующие ToolStripProfessionalRenderer, поэтому они оформлены так же, как панель задач Windows.

Я приблизился к этому, создав новый Renderer, производный от ToolStripProfessionalRenderer:

   class CustomRenderer : ToolStripProfessionalRenderer
   {
      protected override void OnRenderToolStripPanelBackground(ToolStripPanelRenderEventArgs e)
      {
         base.OnRenderToolStripPanelBackground(e);

         LinearGradientBrush lgb = new LinearGradientBrush(e.ToolStripPanel.ClientRectangle, this.ColorTable.ToolStripGradientBegin, this.ColorTable.ToolStripGradientEnd, LinearGradientMode.Vertical);
         e.Graphics.FillPath(lgb, e.ToolStripPanel.ClientRectangle);
      }
   }

Это создает вид градиента с правильными цветами, но они не совсем совпадают. Создается впечатление, что градиент имеет большее количество цветов, поэтому разворот рисуется дольше.

Я учел границы ToolStrips (которые не показаны в этом коде), но они все еще не совсем совпадают.

Кто-нибудь знает, как это сделать?


person Matt    schedule 08.06.2009    source источник


Ответы (2)


Я, наконец, понял это - и теперь это кажется таким очевидным.

ColorTable в ToolStripPanelProfessionalRenderer имеет три интересующих нас цвета:

ColorTable.ToolStripGradientBegin ColorTable.ToolStripGradientMiddle ColorTable.ToolStripGradientEnd

Фон должен быть закрашен двумя частями — верхним градиентом и нижним градиентом.

Верхняя часть переходит от цвета «Начало» к цвету «Средний», а нижняя часть переходит от цвета «Средний» к цвету «Конец».

Выглядит идеально...

person Matt    schedule 11.06.2009

Проверьте глубину цвета вашей установки. У нас была аналогичная проблема в системах, в которых не было 32-битного цвета. Все, что меньше 32-битного цвета, приводило к небольшим различиям. 32-битные цветовые системы выглядели нормально.

Мы так и не нашли решения, но, возможно, вы сможете навязать своим пользователям требование 32-битного цвета. ;-)

person NascarEd    schedule 08.06.2009
comment
Спасибо за предложение, я об этом не подумал. К сожалению, это не сработало :( Я начинаю думать, что мне следует просто отказаться от этой идеи. - person Matt; 09.06.2009