【问题标题】:toolStrip to have menuStrip gradient backgroundtoolStrip 有 menuStrip 渐变背景
【发布时间】:2013-09-04 11:48:40
【问题描述】:

我有一个顶部有菜单和工具条的表单。 menuStrip 有一个漂亮的渐变背景,如何在 toolStrip 控件上获得相同的效果?我知道 RenderMode 属性,但更改它并没有得到想要的结果。

【问题讨论】:

  • 不要认为有这样的属性。如果您想为此制作渐变图像,则有 BackgroundImage 属性。
  • 你如何渲染你的MenuStrip,使它有这样一个gradient background?我的意思是,如果您知道如何渲染它,可能希望在ToolStrip 上应用相同的渲染,以便两者的背景相同。
  • menuStrip 是一个普通的 menuStrip 控件,其 RenderMode 设置为“ManagerRenderMode”,这是默认设置。我不知道它是如何渲染的。如何将相同的渲染器应用于 toolStrip?
  • MenuStrip 和 StatusStrip 具有水平渐变,而 ToolStrip 具有垂直渐变。奇怪的是微软这样做了。

标签: c# winforms toolbar menustrip


【解决方案1】:

您可以使用自定义渲染器实现此目的。

public class CustomToolStripRenderer : ToolStripProfessionalRenderer
{
    public CustomToolStripRenderer() { }

    protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
    {
        //you may want to change this based on the toolstrip's dock or layout style
        LinearGradientMode mode = LinearGradientMode.Horizontal;

        using (LinearGradientBrush b = new LinearGradientBrush(e.AffectedBounds, ColorTable.MenuStripGradientBegin, ColorTable.MenuStripGradientEnd, mode))
        {
            e.Graphics.FillRectangle(b, e.AffectedBounds);
        }
    }
}

然后将您的工具条设置为使用此渲染器的实例。

public Form1()
{
    InitializeComponent();

    CustomToolStripRenderer r = new CustomToolStripRenderer();
    r.RoundedEdges = false;

    toolStrip1.Renderer = r;
}

【讨论】:

  • 请注意,当 ToolStrip 包含带有下拉菜单的项目时,这不会按预期工作。下拉菜单背景也会变成渐变色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2011-03-15
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多