ToolStripMenuItem 更大的垂直填充,或在更大的 ToolStripMenuItem 中垂直居中文本
Posted
技术标签:
【中文标题】ToolStripMenuItem 更大的垂直填充,或在更大的 ToolStripMenuItem 中垂直居中文本【英文标题】:ToolStripMenuItem bigger vertical padding, or vertically centering text in a bigger ToolStripMenuItem 【发布时间】:2011-09-06 11:47:02 【问题描述】:我正在尝试为 ContextMenuStrip 中的 ToolStripMenuItems 设置更大的垂直填充。但是,更改 Padding.Top 属性会将填充添加到底部,而不是顶部。
我还尝试为 ToolStripMenuItem 设置更大的 Height,它可以工作,但是,即使 TextAlign,文本总是在顶部对齐em> 属性是 MiddleCenter。它应该与中心垂直对齐!
我为不同的属性尝试了不同的设置,但没有任何效果。这个想法是我无法让 ToolStripMenuItem 在其文本周围有更多空间,无论是顶部还是底部。
我正在使用 C#、Windows Forms、Net 2.0、Visual Studio 2010 Express、Windows 7。
【问题讨论】:
【参考方案1】:您可以使用Margin
而不是Padding
获得相同的效果,这将使ToolStripMenuItem
的Text
保持对齐。
缺点是当项目被选中时,这不会修改高亮矩形的大小,所以如果你增加很多高度,它会看起来有点奇怪。
【讨论】:
添加几行代码就可以调整ToolStripMenuItem的渲染器的“TextRectangle”。有关详细信息,请参阅下面的答案。【参考方案2】:除了 InBetween 的回答之外,您还可以通过使用自定义渲染器并调整其“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);
【讨论】:
【参考方案3】:添加一个新行就可以了。
这不是最好的解决方案,但它是添加一些填充的快速方法。
在添加对小触摸屏的支持时效果很好。
this.configToolStripMenuItem.Text = "\r\nSettings";
【讨论】:
以上是关于ToolStripMenuItem 更大的垂直填充,或在更大的 ToolStripMenuItem 中垂直居中文本的主要内容,如果未能解决你的问题,请参考以下文章
为啥缩放以填充比 UIImageVIew 尺寸更大的图像? (使用快速)
垂直居中 <span> 文本,位于更大的 <span> 旁边,都在 <div> 内