C#ToolStripPanel绘图问题

时间:2009-06-08 19:21:48

标签: c# winforms toolstrip toolstrippanel

我正在尝试让ToolStripPanel具有与嵌入式ToolStrips相同的绘图样式,以便它看起来像一个连续的栏。我有ToolStrips使用ToolStripProfessionalRenderer,因此它们的样式与Windows任务栏相同。

通过创建一个派生自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的边框(这段代码中未显示),但它们仍然不匹配。

任何人都知道如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

我终于明白了 - 我现在看起来很明显。

ToolStripPanelProfessionalRenderer中的ColorTable有三种我们感兴趣的颜色:

ColorTable.ToolStripGradientBegin ColorTable.ToolStripGradientMiddle ColorTable.ToolStripGradientEnd

背景需要分为两部分 - 顶部渐变和底部渐变。

顶部从“开始”颜色变为“中间”颜色,底部从“中间”颜色变为“结束”颜色。

看起来很完美......

答案 1 :(得分:1)

检查设置的颜色深度。我们在没有32位颜色的系统上遇到了类似的问题。任何小于32位颜色的东西都会产生微妙的差异。 32位色彩系统看起来很好。

我们从未找到过解决方案,但也许您可以将32位颜色要求推送给用户。 ; - )