考虑如下内容:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="WrapTextBlock" Grid.Column="0" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" />
<TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" />
</Grid>
此XAML允许包装
WrapTextBlock
文本,这样做,WrapTextBlock
将占据所有空间并将NotWrapTextBlock
推到右侧。但是我想做的是让
WrapTextBlock
占用尽可能少的空间,将NotWrapTextBlock
紧跟在WrapTextBlock
之后,并在右侧填充空白空间。这意味着:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="WrapTextBlock" Grid.Column="0" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" />
<TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" />
</Grid>
但是,这里的事情是,现在
WrapTextBlock
中的文本不再换行了。我的意思是这样的:
如果文字太长,则需要弯曲:
当文本足够短时,不需要弯曲:
最佳答案
原因是通过将ColumnDefinition
定义为“自动”或*,您没有任何东西可以限制TextBlock
可以使用的大小。因此,文本不自动换行是预期的行为。因此,您必须直接在Width
或MaxWidth
上定义ColumnDefinition
或TextBlock
。例如
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MaxWidth="50"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="WrapTextBlock" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" />
<TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" />
</Grid>
如果您只想说它只占用网格必须使用的7%的空间,则可以给您一个包装,将
Width
更改为类似的内容;<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.07*"/>
<ColumnDefinition Width="0.93*"/>
</Grid.ColumnDefinitions>
因此,第一列将占用可用空间的7%,而右列将消耗其余的空间。希望这可以帮助。
编辑添加项:
您显示的内容与第一行应对齐,其中第一列应按入,第二列应仅留出足够的空间以显示其内容。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="WrapTextBlock" Grid.Column="0" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" />
<TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" />
</Grid>