如何在宽度自动列中TextWrap TextBlock?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在宽度自动列中TextWrap TextBlock?相关的知识,希望对你有一定的参考价值。
考虑如下事项:
<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
定义为Auto或*你没有任何限制你的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>
以上是关于如何在宽度自动列中TextWrap TextBlock?的主要内容,如果未能解决你的问题,请参考以下文章