关于 wpf:TextTrimming with Ellipsis and a Colon

TextTrimming with Ellipsis and a Colon

这是一个比较简单的问题:

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

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

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

"这句话太长了"

=>

"这句话我……"

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

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

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

编辑:

很抱歉给您带来了困惑。

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

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

足够短:

太...:


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

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


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

更新:

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

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

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

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

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

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

更新:

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

干净格式的最终?饩龇桨甘堑髡允咀址钡绞屎戏峙涞目占洳⒂τ檬实钡暮笞骸?pb>


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

>

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