考虑如下内容:

<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中的文本不再换行了。

我的意思是这样的:

如果文字太长,则需要弯曲:

wpf - 如何在自动列宽度内将TextBlock换行?-LMLPHP

当文本足够短时,不需要弯曲:

wpf - 如何在自动列宽度内将TextBlock换行?-LMLPHP

最佳答案

原因是通过将ColumnDefinition定义为“自动”或*,您没有任何东西可以限制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>

10-08 18:38