【发布时间】:2012-11-05 07:18:05
【问题描述】:
我正在开发一个 Windows 窗体应用程序(C#、.NET 4.0、VS 2010),其中我有一个带有 ToolStrip 的非常标准的 MainForm(GripStyle:隐藏,Dock:顶部,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 -feel 有点令人印象深刻(非常平淡,直到您将鼠标悬停在工具条中的某些按钮上)。
我想最后我宁愿坚持使用 ManageeRenderedMode,或者从 Professional 继承的自定义渲染器 - 但我需要摆脱圆角。 其中,我发现 this SO Q 似乎与我正在查看的内容很接近,但没有为我的案例提供答案。
提前致谢
【问题讨论】:
-
Winforms 在不完全创建自己的控件的情况下渲染不同的东西是一件痛苦的事情。现在可能为时已晚,但是您是否搞砸了 WPF/XAML?
-
谢谢,但我们之前看过 WPF,现在我们正试图坚持使用“基本”winforms。如果我需要覆盖某些细节,我不介意从标准工具条继承,但是是的:不必自己渲染整个东西会很好(尤其是我们需要在其中的拆分按钮等) )
标签: c# winforms render toolstrip