中心在紧凑框架中对齐文本?

时间:2012-07-27 15:08:04

标签: c# .net compact-framework

我正在尝试在紧凑的框架中绘制一个自定义按钮,在'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)));
}

使用此代码,字体将在控件的左上角绘制(如预期的那样)。

我的问题是,我怎样才能让它在控件上占据中心?

2 个答案:

答案 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;
}