Textblock.TextTrimming 在网格内不起作用

Posted

技术标签:

【中文标题】Textblock.TextTrimming 在网格内不起作用【英文标题】:Textblock.TextTrimming not working inside a grid 【发布时间】:2011-05-22 21:14:29 【问题描述】:

我的布局有一个 3 列网格,每个网格的宽度都设置为 Width="*"。对于中间(第二)网格,我有另外 3 个列网格,每个网格都包含它自己的文本块,并且列网格宽度再次设置为 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】:

为了使其工作,您需要第二个网格中的最后一列具有 * 大小,否则它会告诉 TextBlock 它有尽可能多的空间,即使它没有.自动调整大小的列不会将内容限制在网格的范围内。但是,如果您使用单个 TextBlock 和多个运行来执行此操作,您可能会获得更好的结果:

<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,这非常简单,如 here 所示。

【讨论】:

为使用 Run.Text 的提示干杯。绝对现在就使用它。你的回答解决了我的问题。非常感谢。 Ta,这对我有用。 BindableRun 链接已失效,但 Google 将我引至 github.com/ksirg/blipface/blob/master/BlipFace/View/Controls/… 等。

以上是关于Textblock.TextTrimming 在网格内不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用手机在网状态查询 API 有效防止虚假注册的设计思路

如何通过代码接入手机在网状态 API

P4 可编程网卡 — In-Network Computing(在网计算)

API网关在网龙教育业务中的实践

“我在网红书店,从来不看书”

震惊一个白帽子居然在网咖做出这种事