文本块的TextTrimming在网格内无效

8
我有一个三列网格用于我的布局,每个宽度都设置为Width="*"。对于中间(第二个)网格,我有另一个三列网格,每个网格都包含自己的文本块,并且再次将列网格的宽度设置为Width="*"
当窗口大小调整时,网格会按预期进行调整,但是如果文本超出网格的边界,第三个文本块不会被修剪。我已经使用TextTrimming="WordEllipsis"TextWrapping="Wrap"设置了文本框,但某种原因这些属性没有被执行。
以下是部分代码:
布局网格:
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="150" MaxWidth="300" Width="1*" />
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="150" MaxWidth="500" Width="1*" />
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="2*"/>
    </Grid.ColumnDefinitions>
</Grid>

第二列代码:

<Grid Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5" Width="Auto">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <TextBlock Text="{Binding Path=FeedItems.Count}" Foreground="White" FontSize="18" Width="Auto" FontWeight="SemiBold" />
    <TextBlock Text=" items from " Foreground="White" FontSize="18" Width="Auto" Grid.Column="1" />
    <TextBlock Text="{Binding Path=Name}" Foreground="White" FontSize="18" Grid.Column="2" TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" Width="Auto" TextWrapping="NoWrap" ClipToBounds="True" />
</Grid>
1个回答

12

为了让这个工作起来,你需要在第二个网格中的最后一列设置一个 * 大小,否则它将告诉 TextBlock 它有尽可能多的空间,即使它不需要。自动大小的列不会限制内容在网格范围内。但是,如果您使用单个 TextBlock 和多个 Runs,您可能会获得更好的结果:

<TextBlock FontSize="18" TextTrimming="CharacterEllipsis">
    <Run Text="{Binding Path=FeedItems.Count}" FontWeight="SemiBold" />
    <Run Text=" items from " />
    <Run Text="{Binding Path=Name}" />
</TextBlock>

请注意,只有在.NET 4.0及以上版本中才能绑定Run.Text。 如果您使用的是早期版本的框架,则必须创建自己的BindableRun,如此处所示,这很简单。


1
感谢你关于使用 Run.Text 提示的建议。从现在开始我一定会使用它。你的答案解决了我的问题,非常感谢! - Daniel Clark
这对我有用。BindableRun链接已经失效,但是谷歌搜索引擎将我带到了https://github.com/ksirg/blipface/blob/master/BlipFace/View/Controls/BindableRun.cs等网站。 - CAD bloke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接