我正在尝试在紧凑的框架中绘制一个自定义按钮,在'OnPaint'函数中我做了这样的事情:
protected override void OnPaint(PaintEventArgs e)
{
System.Drawing.Imaging.ImageAttributes a = new
System.Drawing.Imaging.ImageAttributes();
e.Graphics.DrawImage(pictureBox1.Image, new Rectangle(0, 0, Width, Height),
0, 0, Image.Width, Image.Height, GraphicsUnit.Pixel, a);
Brush b = new SolidBrush(Color.Black);
e.Graphics.DrawString(Text, Font, b, 0, 0, (
new StringFormat(StringFormatFlags.NoWrap)));
}
使用此代码,字体将在控件的左上角绘制(如预期的那样)。
我的问题是,我怎样才能让它在控件上占据中心?
答案 0 :(得分:2)
想出来了!
对于那些感兴趣的人,
float fontHeight = e.Graphics.MeasureString("ABC", Font).Height;
e.Graphics.DrawString("ABC", Font, b, new RectangleF(0, Height / 2.0f - fontHeight/2.0f, Width, Height), format);
为我做了。
答案 1 :(得分:1)
我看到你已经得到了你的答案,所以我甚至不打算测试它是否适用于移动设备。
我把它放在那里是因为它是我遇到的一种工具而且我没有看到很多引用它:
/// <summary>
/// [static method] Generates a StringFormat object based on the ContentAlignment object
/// </summary>
/// <param name="ca">ContentAlignment value from a System.Windows.Label object</param>
/// <returns>StringFormat</returns>
private static StringFormat GetStringFormatFromContentAllignment(ContentAlignment ca) {
StringFormat format = new StringFormat();
switch (ca) {
case ContentAlignment.TopCenter:
format.Alignment = StringAlignment.Near;
format.LineAlignment = StringAlignment.Center;
break;
case ContentAlignment.TopLeft:
format.Alignment = StringAlignment.Near;
format.LineAlignment = StringAlignment.Near;
break;
case ContentAlignment.TopRight:
format.Alignment = StringAlignment.Near;
format.LineAlignment = StringAlignment.Far;
break;
case ContentAlignment.MiddleCenter:
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
break;
case ContentAlignment.MiddleLeft:
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Near;
break;
case ContentAlignment.MiddleRight:
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Far;
break;
case ContentAlignment.BottomCenter:
format.Alignment = StringAlignment.Far;
format.LineAlignment = StringAlignment.Center;
break;
case ContentAlignment.BottomLeft:
format.Alignment = StringAlignment.Far;
format.LineAlignment = StringAlignment.Near;
break;
case ContentAlignment.BottomRight:
format.Alignment = StringAlignment.Far;
format.LineAlignment = StringAlignment.Far;
break;
}
return format;
}