使用省略号和冒号进行文本修剪



这是一个相对简单的问题:

我可以使用以下选项修剪带有省略号的文本:

<TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>

它会给我一些类似于的东西

"这句话太长了"

=>

"这句话我…"

这一切都很棒,但我真正想要的是:

"这句话…:"/"这句…:"

我要找的是省略号后面的冒号。有没有一种简单的方法可以实现这一点?

编辑:

很抱歉造成混乱。

我想将默认省略号字符串从"…"更改为到"…:"。另外,我将在文本字符串本身中包含一个冒号。这样,我将始终显示冒号。同样,在任何情况下,一切都应该在一条线上。

以下是几个可以接受的结果:

足够短:

方式太l…:

这是有效的,但我需要添加一些填充,以便冒号始终可见:

<TextBlock Padding="0,0,5,0" >
    <TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock>
    <TextBlock>:</TextBlock>
</TextBlock>

使用两个TextBlock,第一个是省略号示例,第二个是冒号示例。

更新:

看起来这是一个相对简单的问题,有很多复杂的问题。

人们可能会尝试使用一些TextBlock,第一个带有目标文本,另外两个显示":"one_answers"…:",并根据第一个TextBlock是否有足够的空间显示其所有文本,使用Visibility值转换器在它们之间切换。这有可能,但也有可能导致布局不稳定。

在刚刚实现了一个自定义面板后,我可以想象一个可能的解决方案,其中包括一个设计用于容纳三个孩子的面板,即上面描述的三个文本块

从panel继承的自定义面板应覆盖两个关键方法:Measure和Arrange。

在测量方法中,所有的孩子都应该被测量。

在排列方法中,检查是否有足够的空间来展示前两个孩子,如果有,将他们并排放置。如果没有足够的空间显示,则将第一个子空间的大小设置为允许第三个子空间显示并将第三子空间设置为右对齐。

更新:

我尝试了自定义面板,除了第一个TextBox是剪辑部分字符外,它都能工作。

清洁格式的最终解决方案是一种调整显示字符串的方法,直到它适合应用适当后缀的分配空间。

如果字符串中不包含冒号,则可以使用Binding.StringFormat:

<TextBlock Text="{Binding, StringFormat={}{0}:}" TextTrimming="CharacterEllipsis"/>

(我意识到这是一个非常古老的问题,但我碰巧偶然发现了它,所以我想我会把这个问题留给其他关注的人。)

最新更新