【发布时间】:2016-06-02 08:29:04
【问题描述】:
我希望在未保存项目时更改 ToolStrip 背景。
要渲染工具条的背景,我使用自己的渲染器:
class ToolStripRenderer : ToolStripProfessionalRenderer
{
private MenuBarForm parent;
public ToolStripRenderer(MenuBarForm Parent)
{
parent = Parent;
}
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
{
if (parent.controlItems.Last().Unsaved)
e.Graphics.FillRectangle(new System.Drawing.Drawing2D.LinearGradientBrush(e.ToolStrip.ClientRectangle, SystemColors.ControlLightLight, Color.Red, 90, true), e.AffectedBounds);
else
e.Graphics.FillRectangle(new System.Drawing.Drawing2D.LinearGradientBrush(e.ToolStrip.ClientRectangle, SystemColors.ControlLightLight, SystemColors.ControlDark, 90, true), e.AffectedBounds);
}
}
工具条第一次渲染时,它会以灰色到深灰色的设计正确渲染:
但是当栏应该变成红色时,只有鼠标悬停的按钮变成红色:
我希望整个工具条立即变为红色。
我已经尝试将e.AffectedBounds 更改为e.ToolStrip.Bounds,但无济于事。
【问题讨论】:
-
听起来好像不需要更新控件。您是否尝试过在工具条上调用 Invalidate() ?强制更新?
-
感谢您的回答。我已将其添加到问题中。
-
请不要将答案作为问题的一部分发布。这让未来的读者感到困惑。将其发布为答案。
-
不通过绘制来改变背景颜色,你可以创建一个新的颜色表并覆盖相关属性来改变背景颜色,然后在
UnSaved改变时使用它。 -
听起来很有趣。我不熟悉颜色表。您能否使用颜色表根据属性更改工具条背景颜色的示例代码。