OnPaint经常遇到的问题:StringFormat与ContentAlignment转换问题

聲明:該處理方法是從.net源碼中學到的。

//水平方向的對齊方式
private StringAlignment TranslateAlignment(ContentAlignment align)
{
    ContentAlignment anyRight = ContentAlignment.TopRight | ContentAlignment.MiddleRight | ContentAlignment.BottomRight;
    ContentAlignment anyCenter = ContentAlignment.TopCenter | ContentAlignment.MiddleCenter | ContentAlignment.BottomCenter;

    if ((align & anyRight) != 0)
    {
        return StringAlignment.Far;
    }
    else if ((align & anyCenter) != 0)
    {
        return StringAlignment.Center;
    }
    else
    {
        return StringAlignment.Near;
    }
}

//垂直方向的對齊方式
private StringAlignment TranslateLineAlignment(ContentAlignment align)
{
    ContentAlignment anyBottom = ContentAlignment.BottomRight | ContentAlignment.BottomLeft | ContentAlignment.BottomCenter;
    ContentAlignment anyMiddle = ContentAlignment.MiddleLeft | ContentAlignment.MiddleRight | ContentAlignment.MiddleCenter;

    if ((align & anyBottom) != 0)
    {
        return StringAlignment.Far;
    }
    else if ((align & anyMiddle) != 0)
    {
        return StringAlignment.Center;
    }
    else
    {
        return StringAlignment.Near;
    }
}

 

//上面的方法使用方式
StringFormat sf = new StringFormat();
sf.Alignment = TranslateAlignment(this.TextAlign);
sf.LineAlignment = TranslateLineAlignment(this.TextAlign);

e.Graphics.DrawString(text, this.Font, new SolidBrush(this.ForeColor), face, sf);