2016-05-09 7 views
0

テキストのブロックに必要なテキストフレームのサイズを調べようとしています。これをInDesignスクリプト用にエクスポートしてページを作成します。コンソールアプリケーションのすべて。コンソールアプリケーションでのテキストブロックの高さの決定

私はWPF TextBlockを作成し、TextWidthが、HeightActualHeightがNaNの割り当てをしてきました。

一部のテキストに必要なテキストフレームのサイズはどのように決定できますか? WPF/Winformsのテキストブロックを使用して(既存のコードを試して利用する)最善の解決策ですか、それとも他にも優れたワークフローがありますか?

+0

あなたは* textframe *(私は 'InDesign'が何であるか分かりません)が何であるかを説明すれば、より速くヘルプを得ることができます。それは簡単な質問(あなたが 'console'でタグ付けしたように)かもしれませんが、私はあなたが何を求めているかの手掛かりはありません。コードを提供できますか?絵?何が問題なのか理解していますか? WPFの 'TextBlock'によれば、レイアウトを渡すまではサイズを取得できません。 [強制]することもできます(https://msdn.microsoft.com/en-us/library/system.windows.uielement.updatelayout(v = vs.110).aspx)。 – Sinatr

+0

テキストフレームは、単にテキストボックスのデスクトップパブリッシング用語です。この例では、テキストブロックの定義済みのテキストブロック幅から、必要なテキストブロック高さを取得するだけです。 – user3791372

答えて

0

C#にはテキストを描画するための2つのクラスがあります。 TextRendererとGraphics。

TextRendererはGDIを使ってテキストを描画しますが、GraphicsはGDI +を使用します。 2つは、テキストをレイアウトするために少し異なる方法を使用します。

あなたは、私がTextRendererを使用することをお勧めし、あなたのケースのためにGraphics.MeasureStringまたはTextRenderer.MeasureText

using(Graphics g = Graphics.FromHwnd(IntPtr.Zero)) 
{ 
    SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont); 
} 

を利用することができます。テキストの折り返しの例 -

var size = TextRenderer.MeasureText(text, font, new Size(width, height), TextFormatFlags.WordBreak); 

第3引数は描画矩形のサイズです。あなたがそれを知らない場合は、0として高さを渡すことができます。

+0

私はこれらのどちらもテキストラッピングを処理しないと思いますか? – user3791372

+0

あります。 TextRendererのオーバーロードをチェックします。例で更新されました。 –

+0

うわー、私はそれを逃した - 素晴らしい! – user3791372

関連する問題