我正在使用Visual Layer DrawText进行绘制FormattedText.现在我使用下面的代码来定义格式化的文本,我可以设置TextAlignment为Center.但是VerticalAlignment呢?如下图所示,文本中心不在中心点,此处显示红点.
我正在定义的部分FormattedText:
var ft = new FormattedText("A",
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Verdana"),
36, Brushes.Yellow);
ft.TextAlignment = TextAlignment.Center;
Run Code Online (Sandbox Code Playgroud)
我正在绘制文本的部分:
var centerpoint = new Point(0,0);
dc.DrawText(ft, centerpoint);
Run Code Online (Sandbox Code Playgroud)
这是最终结果:

我希望文本的中间位于圆圈的中心.
我正在试图弄清楚如何计算圆周围的文字标签的位置.这比你第一次阅读时想象的要复杂得多.
我得到了基础知识:
X = ptCenter.X + (dRadius * Math.Cos(dAngle * Math.PI / 180.0))
Y = ptCenter.Y + (dRadius * Math.Sin(dAngle * Math.PI / 180.0))
Run Code Online (Sandbox Code Playgroud)
那么,这将给出我在圆角dAngle上的点与半径dRadius.当然,DrawText(任何种类,但我特别使用DrawingContext.DrawText,如果这对你的答案有任何不同)绘制时给定的点作为文本的左上角.
问题是,这不是绘制文本的正确位置.以下是该问题的说明:
Jan水平居中于点2月从左下角绘制,而Mar似乎是水平中间的那种4月垂直居中等等.
标签不是以统一的方式定位在点周围.它取决于你绘制的角度.
我需要绘制的标签数量可能会有所不同,因此硬编码软糖因素已经出来了.我需要绘制的角度也可以变化,因此也没有任何软糖因素.所有这一切都必须在飞行中计算.
看起来好像0,90,180,270是特殊情况,而其他似乎是在点周围垂直半中心,但根据你所谈论的圆圈的哪一边向右或向左绘制?
我在这里走在正确的轨道上吗?或者是否有"已知"算法?
谢谢.