0

我试图让 ToolStripPanel 具有与嵌入式 ToolStrips 相同的绘图样式,以便它看起来像一个连续的条形图。我有使用 ToolStripProfessionalRenderer 的 ToolStrip,因此它们的样式与 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 的边界(此代码中未显示),但它们仍然不完全匹配。

有谁知道如何做到这一点?

4

2 回答 2

2

我终于想通了——我现在看起来很明显。

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

ColorTable.ToolStripGradientBegin ColorTable.ToolStripGradientMiddle ColorTable.ToolStripGradientEnd

背景需要分两部分绘制——顶部渐变和底部渐变。

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

看起来很完美...

于 2009-06-11T14:40:34.027 回答
1

检查设置的颜色深度。我们在没有 32 位颜色的系统上遇到了类似的问题。任何小于 32 位的颜色都会导致细微的差异。32 位色彩系统看起来不错。

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

于 2009-06-08T20:24:52.753 回答