我正在开发一个Windows应用程序(C#,.NET 4.0,VS 2010),其中我有一个非常标准的带有ToolStrip的MainForm (GripStyle: ToolStrip,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 (而不是使用我的呈现器)。在这种情况下,工具条角看起来很适合(矩形),但工具栏内的拆分按钮似乎被打破了(单击向下箭头没有显示下拉框),原因尚不清楚,总体外观(n-感觉)有点平淡(很平,直到你在工具条中的一些按钮上悬停)。
我想,最后我宁愿坚持使用ManageeRenderedMode,或者使用自定义呈现器继承专业版,但我需要去掉圆角。在其他方面,我找到了this SO Q,它似乎接近我所看到的,但没有给出我的案例的答案。
提前感谢
发布于 2012-11-16 14:44:22
在你的渲染类中试试这个:
public class MainFormToolStripRenderer : ToolStripProfessionalRenderer {
public MainFormToolStripRenderer() {
this.RoundedEdges = false;
}
}
发布于 2018-02-01 14:03:45
在accepted answer by LarsTech的基础上,您不一定需要实现一个新的Renderer类,除非有令人信服的理由这样做。
您可以这样做,如下所示:
toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false };
或者,由于ToolStrip的默认呈现程序( RenderMode设置为ManagerRenderMode )已经是ToolStripProfessionalRenderer,您可以按如下方式将其转换为ToolStripProfessionalRenderer并直接访问RoundedEdges属性:
((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;
发布于 2017-05-23 14:21:36
正如am05mhz所提到的,只要选择RenderMode > System,圆角就会消失:
https://stackoverflow.com/questions/13418721
复制相似问题