2013年2月20日水曜日

【WPF】RichTextBoxの幅が0な件


正確にはRichTextBoxの下にあるFlowDocumentの幅が0な件.
RichTextBoxに適当な幅を与えているのに
FlowDocumentの幅が0なせいで
改行されているわけではないが1文字で次の行にいってしまう.


こんなコードだと
入力しても1文字ごとに下へ下へと伸びていく.
幅を無視して下へと伸びていくの図


FlowDocumentのPageWidthに適当な固定値を与えてやれば当然そこまでは幅がのびるのだが
実際はウインドウサイズを変えたりいろいろあるので固定幅はいただけない.

FlowDocumentにはRichTextBoxと同じ幅であってほしいのだ.


…というわけで解決策.
XAMLだけで記述する場合.


FlowDocumentにはRichTextBoxと同じ幅であってほしいので
PageWidthにはRichTextBoxの幅をバインド.
これだけでOK.

続いて,C#だけで記述する場合.
特にカスタムコントロールにRichTextBoxを配置する場合.
コンストラクタでRichTextBoxを設定することになるだろうが,
コンストラクタ内ではまだUIに配置されていないので
幅が決まっていない.
つまりコンストラクタ内でRichTextBlockの幅を取得しても0なのである.


ここでFlowDocumentの幅を設定しても固定値となってしまうので
ウインドウサイズの変更に対応できない.

C#で書く場合はこう書けばOK.


RichTextBoxのサイズ変更時にイベントを発行させて
その都度FlowDocumentのサイズも変更してやればいい.

使いこなせれば便利なんだろうけど
今のところ不便だぞRichTextBox!

0 件のコメント:

コメントを投稿