[C# WPF] 關於將文本框豎起來(旋轉文字)


xx.xmal.cs 后台代碼中動態添加控件到 UI

文字顯示在一個 Canvas 中(定位用Canvas.SetLeft() / Canvas.SetTop() ),
為了實現排版效果,可適當在 TextBlock 外套一層 StackPanel 或 DockPanel

DockPanel pnl = new DockPanel();
TextBlock titleBlock = new TextBlock();

titleBlock.LayoutTransform = new RotateTransform()
{
    Angle = 270    // or 90
};
titleBlock.VerticalAlignment = VerticalAlignment.Center;

titleBlock.Text = "Here some Text";
Canvas.SetLeft(pnl, 50);
Canvas.SetTop(pnl, 100);

這時候,文本旋轉,跟定位時的 坐標 X Y 並沒有相互影響(也就是上面的設位置,不需要作什么特別考慮)。
而另一種情況:

在渲染過程中自定義渲染內容 ( 重寫的 OnRender )

// Sample -- Ctrl => Height:500  Width:600

protected override void OnRender(DrawingContext dc)
{
    base.OnRender(dc);

    // TODO : for sample
    var CtrlWidth = 600;
    var CtrlHeight = 400;

    // ...

    // DrawTitle
    var ft = new FormattedText("Some Text Here", CultureInfo.CurrentCulture,
        FlowDirection.LeftToRight, new Typeface("Tahoma"), 15, Brushes.Black);

    // use ft.Width and ft.Height to calculate POSITIONS

    RotateTransform RT = new RotateTransform() { Angle = 270 };    // 要旋轉的角度

    var point = new Point((CtrlHeight - ft.Width) / 2 - CtrlWidth, (CtrlWidth - ft.Height)/2 - CtrlHeight);    // 注意這里的計算 很容易迷糊
 
    dc.PushTransform(RT);
    dc.DrawText(ft, point );
    dc.Pop();

    // Do other Drawing..
}

要點:
OnRender 中旋轉時,以渲染對象的 Point(0, 0) 點為基准,進行旋轉,270度,90度的時候,就是X Y對調的情況。
當旋轉180度的時候,X取反,Y取反。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM