У меня есть следующий макет (упрощенный):
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="400" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<!-- Code for Column=0 -->
<ScrollViewer Grid.Column="1">
<Grid x:Name="layoutGrid">
<Grid.ColumnDefinitions>
<Grid.ColumnDefinition Width="Auto" />
<Grid.ColumnDefinition MinWidth="100" MaxWidth="400" />
<Grid.ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Code for Row=0 and Row=1 -->
<GroupBox Grid.ColumnSpan="3" Grid.Row=2>
<TextBlock Text="{Binding ...}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" />
</GroupBox>
</Grid>
</ScrollViewer>
</Grid>
- Первый столбец должен занимать столько места, сколько ему нужно (иногда это может быть 100 пикселей, иногда 500).
- Второй столбец Должен растягиваться до доступного места, но не более 400 пикселей (становится некрасивым).
- Третий столбец должен занимать столько места, сколько ему нужно (иногда это может быть 200 пикселей, иногда 400).
- Если в некоторых редких случаях layoutGrid требует места больше, чем доступно на экране, должна быть видна горизонтальная полоса прокрутки.
- GroupBox всегда должен иметь общую ширину всех трех столбцов (он должен расширяться на столько же, сколько их общая ширина). И в этом пространстве текстовое поле должно переноситься. GroupBox не должен растягиваться на все пространство, доступное на экране.
Как я могу добиться этого в xaml? Кажется, что как только ScrollViewer вставлен, TextBlock больше не переносится.