C# 使用DrawingContext.DrawText()在WPF中绘制垂直文本

C# 使用DrawingContext.DrawText()在WPF中绘制垂直文本,c#,.net,wpf,drawing,C#,.net,Wpf,Drawing,我正在WPF中使用DrawingContext进行一些自定义绘图。我正在使用DrawingContext.DrawText来绘制字符串。现在,在一个我想垂直绘制文本的地方。DrawingContext或DrawText()函数中是否有垂直绘制文本的选项?您必须使用DrawingContext类的PushTransform和Pop方法 DrawingContext dc; // Initialize this correct value RotateTransform RT = new Rotat

我正在WPF中使用DrawingContext进行一些自定义绘图。我正在使用
DrawingContext.DrawText
来绘制字符串。现在,在一个我想垂直绘制文本的地方。DrawingContext或DrawText()函数中是否有垂直绘制文本的选项?

您必须使用
DrawingContext
类的
PushTransform
Pop
方法

DrawingContext dc; // Initialize this correct value
RotateTransform RT = new RotateTransform();
RT.Angle = 90
dc.PushTransform(RT)
dc.DrawText(...);
dc.Pop();

对不起,我不得不把这个贴出来,因为我的头撞到了墙上,花了15分钟想弄明白。我不想让其他任何人经历这种情况。

我的解决方案是:需要围绕文本原点创建旋转变换,因此我们将x和y传递给旋转变换构造函数

       ...
        // ft - formatted text, (x, y) - point, where to draw            
        dc.PushTransform(new RotateTransform(-90, x, y));
        dc.DrawText(ft, new Point(x, y));
        dc.Pop();
        ...

虽然这个答案很古老,但我想补充一点,变换位置应该由另一个变换对象来完成,而不是“手动”交换Point()ctor的值,后者只能在90度角下工作。当创建一个带有文本位置的平移变换对象并在旋转之前按下它时,代码将以任意角度工作。请考虑添加一些文本来解释您的答案。用“代码>旋转变换/<代码>定义通用的旋转点是有意义的。x和y是文本位置坐标。
       ...
        // ft - formatted text, (x, y) - point, where to draw            
        dc.PushTransform(new RotateTransform(-90, x, y));
        dc.DrawText(ft, new Point(x, y));
        dc.Pop();
        ...