如何在宽度自动列中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可用的大小。因此,文本的预期行为不会被包裹。因此,您必须直接在WidthMaxWidth上定义ColumnDefinitionTextBlock。所以例如;

<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?的主要内容,如果未能解决你的问题,请参考以下文章

python textwrap 模块,这里有你需要的学习资料

网格列中的 XAML 拉伸文本块

Python标准库之textwrap模块

进阶第八课 Python模块之textwrap

Python标准库--textwrap模块

python使用textwrap包在已经生成的长字符串中嵌入回车符实战