如何在宽度自动列中TextWrap TextBlock?

Kin*_*han 18 silverlight wpf xaml 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>
Run Code Online (Sandbox Code Playgroud)

这个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>
Run Code Online (Sandbox Code Playgroud)

但这里的事情是,现在文本WrapTextBlock将不再包装.

有解决方案吗

====编辑:我的意思是:

当文本太长时,它需要扭曲:

在此输入图像描述

当文本足够短而不需要变形时:

在此输入图像描述

Chr*_* W. 20

原因是将您定义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>
Run Code Online (Sandbox Code Playgroud)

会给你你的包装,如果你想说而只是允许它例如说,网格必须使用7%的空间,改变之类Width的东西;

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.93*"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)

因此,第一列将占用可用空间的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>
Run Code Online (Sandbox Code Playgroud)

  • 我不认为你的第一个答案是有效的 - MaxWidth似乎没有包装文本.你试过这个吗? (2认同)