使用省略号和冒号进行TextTrimming

时间:2012-03-09 07:42:39

标签: wpf texttrimming

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

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

<TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>
它会给我一些类似的东西:

“这句话太长了”

=&GT;

“这句话我......”

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

“这句话......:”/“这句话......:”

我正在寻找的是省略号之后的冒号。有没有一种简单的方法来实现这一目标?

编辑:

抱歉这令人困惑。

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

这里有几个可以接受的结果:

足够短:

方式也是......:

3 个答案:

答案 0 :(得分:22)

这样可行,但我需要添加一些填充,以便冒号始终可见:

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

答案 1 :(得分:2)

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

更新

看起来这是一个相对简单的问题,有很多并发症。

有人可能会想要一些TextBlocks,第一个带有目标文本,另外两个显示“:”和“...:”并根据第一个TextBlock是否有足够的空间切换它们的Visibility值转换器显示其所有文字。这有可能,但有可能出现不稳定的布局。

刚刚实现了一个自定义面板,我可以设想一个可能的解决方案,涉及一个旨在容纳三个孩子的解决方案,这将是三个描述的文本块。

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

在测量方法中,应测量所有儿童。

在安排方法中检查是否有足够的空间显示前两个孩子,如果有,请将它们并排放置。如果没有足够的房间显示,则第一个孩子的大小允许第三个孩子的房间显示并将第三个孩子对齐。

更新

我尝试了自定义面板,除了第一个TextBox剪辑部分字符外,它才有效。

干净格式化的最终解决方案是调整显示字符串直到适合分配的空间并应用适当的后缀的方法。

答案 2 :(得分:0)

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

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

(我意识到这是一个非常老的问题,但是我偶然发现了这个问题,所以我认为我应该把这个扔给其他关注的人。)