11

我正在开发一个 Windows 窗体应用程序(C#、.NET 4.0、VS 2010),其中我有一个带有 ToolStrip 的非常标准的 MainForm(GripStyle:隐藏,Dock:顶部,RenderMode:ManagerRenderMode)。工具条包含一些基本项(ToolStripLabel、ToolStripSeparator、ToolStripSplitButton)。

这呈现如下:

默认渲染的 ToolStrip ManagerRenderMode

起初我只是想在工具条下方添加一个“底部”边框,但我也注意到这个工具条是用“圆角”渲染的(您可以在图像中看到右侧的顶部和底部),并且垂直渐变线。

我怎样才能使这些角不圆?

我试过:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        base.OnRenderToolStripBorder(e);

        var y = e.ToolStrip.Height-1;
        e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y));
    }

this.toolStrip_Actions.Renderer=new MainFormToolStripRenderer();并通过我的表单初始化将其连接起来。

这给了我底部边框,但对圆角没有做任何事情。此外,通过添加底部边框,圆角更加明显:

由自定义 ToolStripProfessionalRenderer 渲染的 ToolStrip

接下来,我尝试在上面的同一事件处理程序中绘制一个矩形,以尝试(至少)将圆角和垂直渐变隐藏在实心矩形边框后面。这不起作用,因为可用的绘图区域(e.AffectedBounds)在圆形边框内。

我还尝试将 ToolStrip 的 RenderMode 设置为 System(而不是使用我的渲染器)。在这种情况下,工具条的角落似乎很贴合(矩形),但工具栏中的拆分按钮似乎已损坏(单击向下箭头不显示下拉菜单),原因尚不清楚,整体外观-n -feel 有点令人印象深刻(非常平淡,直到您将鼠标悬停在工具条中的某些按钮上)。

我想最后我宁愿坚持使用 ManageeRenderedMode,或者从 Professional 继承的自定义渲染器 - 但我需要摆脱圆角。其中,我发现这个 SO Q似乎与我正在查看的内容接近,但没有为我的案例提供答案。

提前致谢

4

3 回答 3

11

在你的渲染器类中试试这个:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer {

  public MainFormToolStripRenderer() {
    this.RoundedEdges = false;
  }
}
于 2012-11-16T14:44:22.717 回答
3

正如 am05mhz 提到的,只需选择RenderMode > System,圆角就会消失:

于 2017-05-23T14:21:36.907 回答
2

LarsTech接受的答案的基础上,您不一定需要实现新的 Renderer 类,除非有令人信服的理由这样做。

您可以按以下方式将其作为一个衬垫执行:

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false };

或者由于将 RenderMode 设置为 ManagerRenderMode 的 ToolStrip 的默认渲染器已经是 ToolStripProfessionalRenderer,您可以将其转换为这样并直接访问 RoundedEdges 属性,如下所示:

((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;
于 2018-02-01T14:03:45.157 回答