我有以下布局(简化):
<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就不再换行了。
只需给TextBlock
a MaxWidth
哪一个是ActualWidth
的任一GroupBox
或者在你的情况下甚至layoutGrid
(身为你的GroupBox
具有相同的宽度)。这将迫使TextBlock
必须在它的时候包装Width
超过该尺寸,从而满足您的要求。
所以像这样:
<GroupBox x:Name="grpBox"
Grid.Row="2"
Grid.ColumnSpan="3">
<TextBlock MaxWidth="{Binding ElementName=grpBox,
Path=ActualWidth}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding ...}"
TextWrapping="Wrap" />
</GroupBox>
or
<TextBlock MaxWidth="{Binding ElementName=layoutGrid,
Path=ActualWidth}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding ...}"
TextWrapping="Wrap" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)