我正在开发一个Windows窗体应用程序(C#,.NET 4.0,VS 2010),我有一个非常标准的MainForm,带有ToolStrip(GripStyle:Hidden,Dock:Top,RenderMode:ManagerRenderMode)。工具条包含一些基本项(ToolStripLabel,ToolStripSeparator,ToolStripSplitButton)。
这表现如下:
起初我只是想在工具条下面添加一个“底部”边框,但我也注意到这个工具条是用'圆角'渲染的(你可以在图像中看到右边的顶部和底部) )和垂直渐变线。
如何让这些角落不圆?
我试过了:
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();
连接它。
这给了我底部边框,但没有为圆角做任何事情。此外,添加底部边框,圆角更明显:
接下来,我尝试在上面的相同事件处理程序中绘制一个矩形,以尝试(至少)隐藏实心矩形边框后面的圆角和垂直渐变。这不起作用,因为可用的绘图区域(e.AffectedBounds)位于圆角边框内。
我还尝试将ToolStrip的RenderMode设置为System(而不是使用我的渲染器)。在这种情况下,工具条角似乎适合(矩形),但工具栏中的拆分按钮似乎被打破(单击向下箭头不显示下拉列表),原因尚不明确,整体外观-feel有点平庸(相当平坦,直到你将鼠标悬停在工具条的某些按钮上)。
我想最后我宁愿坚持使用ManageeRenderedMode,也不想继承自Professional的自定义渲染器 - 但我需要摆脱圆角。 除其他外,我发现this SO Q似乎与我正在看的内容很接近,但没有给我一个答案。
提前致谢
答案 0 :(得分:11)
在渲染器类中尝试此操作:
public class MainFormToolStripRenderer : ToolStripProfessionalRenderer {
public MainFormToolStripRenderer() {
this.RoundedEdges = false;
}
}
答案 1 :(得分:3)
如上所述,只需选择 RenderMode>系统和圆角消失:
答案 2 :(得分:2)
基于accepted answer LarsTech,你不一定需要实现一个新的Renderer类,除非有令人信服的理由这样做。
您可以按照以下方式执行此操作:
toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false };
或者由于RenderMode设置为ManagerRenderMode的ToolStrip的默认渲染器已经是ToolStripProfessionalRenderer,您可以按原样投射它并直接访问RoundedEdges属性,如下所示:
((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;