ウィンドウには、2つの列を持つグリッドがあります。左側の列には、幅は一定ですが、高さが適応するコントロールが含まれています。右側の列には、グリッド内(およびウィンドウ内)の残りのすべてのスペースを占めるTextBoxが含まれています。
グリッドには最小の幅と高さが与えられ、ScrollViewer内にラップされます。ユーザーがウィンドウのサイズを変更してグリッドの最小幅/高さよりも小さくすると、スクロールバーが表示されます。
これがまさに私が望んでいることです。ただし、ユーザーがテキストの入力を開始すると問題が発生します。テキストが長すぎてTextBoxの1行に収まらない場合は、テキストを折り返す必要があります。したがってTextWrapping="Wrap"
、TextBoxを設定しました。ただし、TextBoxには自動幅があり、ScrollViewer(実際にはラップされているグリッド全体)でラップされているため、TextBoxは右に拡大し続けます。
ウィンドウが拡張された場合にTextBoxを拡張したいのですが、TextBoxをテキストで拡張したくありません。むしろ、テキストは利用可能なTextBox内で折り返される必要があります。テキストがTextBoxの高さに収まらない場合は、TextBox内にスクロールバーを表示する必要があります。
これを達成する方法はありますか?
以下は私の問題を示すいくつかのコードです:
<Window x:Class="AdaptingTextBoxes.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="400" Background="DarkCyan">
<Grid Margin="10" Name="LayoutRoot">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid MinWidth="300" MinHeight="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="0,0,10,0" Content="Button" Width="100" />
<TextBox Grid.Column="1" AcceptsReturn="True" TextWrapping="Wrap" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" />
</Grid>
</ScrollViewer>
</Grid>
</Window>