考虑如下事项:
<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
中的文字不再包装了。
我的意思是如下:
当文字太长时,需要扭曲:
当文字足够短而不需要变形时:
答案 0 :(得分:19)
原因是将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>