For all here who may have a similar problem I want to share my implementation of the alignment mapping with you:
// Define the alignment table
var alTable = new Dictionary<TextAlignment, StringAlignment[]>
{
{TextAlignment.TopLeft, new [] { StringAlignment.Near, StringAlignment.Near }},
{TextAlignment.TopCenter, new [] { StringAlignment.Center, StringAlignment.Near }},
{TextAlignment.TopRight, new [] { StringAlignment.Far, StringAlignment.Near }},
{TextAlignment.MiddleLeft, new [] { StringAlignment.Near, StringAlignment.Center }},
{TextAlignment.MiddleCenter, new [] { StringAlignment.Center, StringAlignment.Center }},
{TextAlignment.MiddleRight, new [] { StringAlignment.Far, StringAlignment.Center }},
{TextAlignment.BottomLeft, new [] { StringAlignment.Near, StringAlignment.Far }},
{TextAlignment.BottomCenter, new [] { StringAlignment.Center, StringAlignment.Far }},
{TextAlignment.BottomRight, new [] { StringAlignment.Far, StringAlignment.Far }}
};
// Add the ResourceViewTimelineCell flag
calendarControl.CustomDraw |= CustomDrawElements.ResourceViewTimelineCell;
calendarControl.Draw += delegate(object sender, DrawEventArgs e)
{
var ff = new StringFormat
{
Alignment = alTable[e.Style.HeaderTextAlignment][0],
LineAlignment = alTable[e.Style.HeaderTextAlignment][1]
};
e.Graphics.DrawString("TXT", e.Style.HeaderFont,
new SolidBrush(e.Style.HeaderTextColor),
new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height), ff);
};
Creating a Dictionary is much more efficient than mapping with a switch/case block.
Best regards
Achim