2009-05-19 12 views
9

私は助けが必要です。これが可能かどうかわからない。私は以下を持っています:wpf textbox textwrapping

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox TextWrapping="Wrap" MinLines ="5"/> 
    </Grid> 

幅が*のグリッド列の内側に折り返されたテキストボックスです。私は、テキストボックスが利用可能なすべての幅(したがって*)を取るようにしたいが、ユーザーがテキストを追加するときに、行の終わりに(使用可能なスペースで)終わると折り返したい。

現在のところ、上記では幅全体のテキストボックスが表示されますが、テキストを入力すると、テキストボックスの幅はテキストとともに大きくなります。

私はMaxWidth =を設定できることは分かっていますが、その列のポイントは*私はその列のサイズがわかりません。

私はテキストボックスに "wpfがそれを取るようにして、それ以上のピクセルを増やさないで、成長しないでください"と言っています。

wpfがコントロールを求めているため、ユーザーが境界線を超えてテキストを追加すると、スペースが必要以上に要求され、幅が無限に広がります。

答えて

9

TextBoxMaxWidthプロパティは、スター付きの列のActualWidthプロパティにバインドしてください(これを行うには、列に名前を付ける必要があります)。私は過去にこのようなことをやったことはかなり確信しています。

のような何か:

MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth} 

幸運!

+0

ColumnDefinitionのActualWidthプロパティがDependencyPropertyでなく、MaxWidthが常に0になるため、これは正常に動作しますが、動作しません。今すぐテストしました... – Vale

0

TextBoxにGrid.Column="1"を設定すると、私にとって適切に動作するように見えます。 RandomEngy約Grid.Column="1"言うことに加えて

+0

+1良い呼び出しで、TextBox 2番目の列に表示するように指示されていませんでした(彼が意図した通り)。 :) – Pwninstein

+0

私は彼がカラム0にそれを望んでいると仮定しています。 – Crispy

+0

彼は上記のとおりです: "...は、幅*のグリッドカラムの内側に折り返すテキストボックスです"。 Width = "*"の列は2番目の列(Grid.Column = "1")です。 – Pwninstein

0

は、あなたがそれは違う子Stretch行動(例えばStackPanel)と別の容器の内側に設定されています場合は特に、Grid自体にいくつかの配向特性を設定することも必要があります。

+0

"いくつかの配置プロパティ"?どの人、そして何に? – Anthony

+0

@ Anthony:これは、Grid自体のホスト方法によって異なります。 WPF要素のサイズ変更動作は、要素自体だけでなく、要素をホストしているかにも依存します。この動作を確認するには、ウィンドウ内のStackPanel内にButton(w/text)を作成します。 StackPanelの向きを変更し、Buttonのサイズ変更の動作の違いを観察します。 – micahtan