C# ToolStripMenuItem较大的垂直填充,或较大ToolStripMenuItem中的文本垂直居中
我试图在ContextMenuStrip中为ToolStripMenuItems设置更大的垂直填充。但是,更改Padding.Top属性会将Padding添加到底部,而不是顶部 我还尝试为ToolStripMenuItem设置更大的高度,它可以工作,但是,文本总是在顶部对齐,即使TextAlign属性是MiddleCenter。它应该与中心垂直对齐 我尝试了不同属性的不同设置,但没有效果。我的想法是,我无法让ToolStripMenuItem在文本周围有更多的空间,无论是从顶部还是底部C# ToolStripMenuItem较大的垂直填充,或较大ToolStripMenuItem中的文本垂直居中,c#,winforms,menu,padding,toolstripmenu,C#,Winforms,Menu,Padding,Toolstripmenu,我试图在ContextMenuStrip中为ToolStripMenuItems设置更大的垂直填充。但是,更改Padding.Top属性会将Padding添加到底部,而不是顶部 我还尝试为ToolStripMenuItem设置更大的高度,它可以工作,但是,文本总是在顶部对齐,即使TextAlign属性是MiddleCenter。它应该与中心垂直对齐 我尝试了不同属性的不同设置,但没有效果。我的想法是,我无法让ToolStripMenuItem在文本周围有更多的空间,无论是从顶部还是底部 我正在使
我正在使用C#、Windows窗体、Net 2.0、Visual Studio 2010 Express、Windows 7。您可以使用
边距
而不是填充
来获得相同的效果,这将保持ToolStripMenuItem的文本
对齐
缺点是,在选择项目时,这不会修改高亮矩形的大小,因此如果高度增加很多,它可能看起来有点奇怪。除了中间人的答案外,您还可以通过使用自定义渲染器并调整其“TextRectangle”属性来修复高亮矩形。这里有一些示例代码应该会有所帮助
var itemHeight = 36;
var verticalPadding = 36 - TextRenderer.MeasureText("A", _DisplayNameFont).Height / 2;
menu.Renderer = new MyRenderer { VerticalPadding = verticalPadding };
class MyRenderer : ToolStripSystemRenderer
{
public int VerticalPadding { get; set; }
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
if (null == e)
{ return; }
e.TextFormat &= ~TextFormatFlags.HidePrefix;
e.TextFormat |= TextFormatFlags.VerticalCenter;
var rect = e.TextRectangle;
rect.Offset(0, VerticalPadding);
e.TextRectangle = rect;
base.OnRenderItemText(e);
}
}
添加一个新行就可以了
这不是最好的解决方案,但这是一种快速添加填充物的方法
在添加对小型触摸屏的支持时效果良好
this.configToolStripMenuItem.Text = "\r\nSettings";
如果添加几行代码,可以调整ToolStripMenuItem渲染器的“TextRectangle”。有关详细信息,请参见下面的答案。