2009-06-08 86 views
0

我想讓ToolStripPanel擁有與嵌入式ToolStrips相同的繪圖風格,以便它看起來像一個連續的欄。我有使用ToolStripProfessionalRenderer的ToolStrips,因此它們的樣式與Windows任務欄相同。C#ToolStripPanel繪圖問題

我已經得到了通過創建從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

我終於想通了 - 我現在看起來很明顯。

的ColorTable在ToolStripPanelProfessionalRenderer有三種顏色,我們感興趣的是:

ColorTable.ToolStripGradientBegin ColorTable.ToolStripGradientMiddle ColorTable.ToolStripGradientEnd

背景需要兩個部分要塗 - 頂梯度,和底部的梯度。

頂部從「開始」顏色變爲「中間」顏色,底部從「中間」顏色變爲「結束」顏色。

看起來很完美...

1

檢查設置的顏色深度。對於沒有32位顏色的系統,我們遇到了類似的問題。小於32位顏色的任何內容都會導致細微的差異。 32位彩色系統看起來不錯。

我們從未找到過解決方案,但也許您可以將32位顏色要求推送到您的用戶。 ;-)

+0

感謝您的建議,我沒有想到這一點。不幸的是,這並沒有訣竅:(我開始認爲我應該放棄這個想法。 – Matt 2009-06-08 20:50:51