2013-04-11 23 views
7

TextWrapping="Wrap"でテキストブロック内の改行数を検出する方法はありますか?TextBlockの改行数を折り返しで検出しますか?

非固定幅フォントを使用することを検討しています。大きなテキストタイトル、アニメーション、アプリケーションのロゴ、およびアプリケーションのテーマを持つ、新しいパーソナライズされたMessageBoxウィンドウを作成しているため、これが必要です。

それは私が身体メッセージの改行の数に応じて、ウィンドウのサイズを変更する必要があることは明らかだ - デフォルトのメッセージボックスウィンドウがどのように動作するかに似ています。

+0

私は、テキストブロックの高さを確認しようと考えていますが、私はこれに良い方法を確立していません。私はそれが唯一の解決策だとは思わない。私の英語のために申し訳ありません。 – Guilherme

+1

この[解決策](http://stackoverflow.com/questions/5720302/wpf-get-wrapped-text-out-of-a-textbox)をご覧ください。それはTextBoxについてですが、まだあなたを助けるかもしれません。 – Herdo

+0

ActualHeightプロパティ – Avishek

答えて

5

txtName.ActualHeightはラップなしで取得していますが、ActualHeight(折り返し付き)を先に取得した値で割った値が表示されます。あなたは線の数を取得する必要があります。

注:実際の高さはコンストラクタで取得できません。テキストブロックがフォームにレンダリングされたら、それを取得します。

例: (NOWRAP)

txt.ActualHeight 
311.0 

(ラップ)

txt.ActualHeight 
1420.4400000000019 

ので、

int lineCount = (txt.ActualHeight/311.0) 

はそれが役に立てば幸い:)として

更新あなたの質問を更新ごとに:あなたはテキストブロックの高さごとにメッセージボックスの高さを設定する必要がある場合

、あなたは、単にこれを行うことができます。

msgbox.Height = txt.ActualHeight + 10; 

//を私はほんの少しのマージンを追加するための10を追加しました。

+0

はい、私はそれをやろうとします。私はそれが最良の方法だと思っていますが、フォントサイズを変更する必要がある場合は、もう一度テストして再計算する必要があります。 – Guilherme

+0

@Guilherme:私の更新された答えをチェックして、再計算を避けることができます。 – Avishek

1

Windowsはコンテンツに基づいてサイズを調整できます。 SizeToContentプロパティを参照してください。

+0

はい、これはウィンドウのサイズで動作しますが、この特定のケースでは、いくつかのアニメーションやその他のコントロールのために、「あまり自動的に」は必要ありません。とにかく助けてくれてありがとう。 +1 – Guilherme

関連する問題