20

考虑如下:

<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不会再换行了。

我的意思如下:

当文本太长时,它需要变形:

当文本足够短且不需要扭曲时:

4

1 回答 1

22

原因是通过将您定义ColumnDefinition为 Auto 或 * 您没有什么可以限制您TextBlock可以使用的大小。因此,文本不换行是预期的行为。因此,您必须直接在 the或 the上定义 aWidth或。例如,MaxWidthColumnDefinitionTextBlock

<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>
于 2013-06-03T15:44:03.470 回答