26

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

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

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

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

“这句话太长了”

=>

“这句话我……”

这一切都很棒而且花花公子,但我真正想要的是:

“这句话……:”/“这句话……:”

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

编辑:

对困惑感到抱歉。

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

以下是一些可以接受的结果:

足够短:

太我...:

4

3 回答 3

29

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

<TextBlock Padding="0,0,5,0" >
    <TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock>
    <TextBlock>:</TextBlock>
</TextBlock>
于 2012-03-09T17:41:44.893 回答
2

使用两个 TextBlocks,第一个是省略号,第二个是冒号。

更新:

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

可能会想要一些 TextBlock,第一个带有目标文本,另外两个显示“:”和“...:”,并根据第一个 TextBlock 是否有足够的空间来显示所有内容,使用可见性值转换器在它们之间切换其文本。这有可能,但有可能导致布局不稳定。

刚刚实现了一个自定义面板,我可以想象一个可能的解决方案涉及一个设计为容纳三个孩子的解决方案,这将是上面描述的三个 TextBlock

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

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

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

更新:

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

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

于 2012-03-09T08:55:33.350 回答
0

If you do not include the colon in your strings, you can use Binding.StringFormat:

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

(I realize this is a very old question, but I happened to stumble on it, so I thought I'd throw this in for anyone else who follows.)

于 2020-12-03T01:12:18.017 回答