这是一个相对简单的问题:
我可以用省略号裁剪文本,如下所示:
<TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>它会给我一些类似的东西:
“这句话太长了”
=>
“这句话我...”
这一切都很棒,但我真正想要的是:
“这句话...:”/“这句话...”
我要找的是省略号后面的冒号。有没有一种简单的方法来实现这一点?
编辑:
很抱歉给你造成了混乱。
我想要将缺省省略号字符串从“...”到“……:”。同样,我将在文本字符串本身中包含一个冒号。这样,我将始终显示冒号。同样,在每种情况下,所有事情都应该在同一行上。
以下是几个可以接受的结果:
足够简短:
方式太l……:
发布于 2012-03-10 01:41:45
这是可行的,但我需要添加一些填充,以便冒号始终可见:
<TextBlock Padding="0,0,5,0" >
<TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock>
<TextBlock>:</TextBlock>
</TextBlock>发布于 2012-03-09 16:55:33
使用两个TextBlocks,其中省略号在第一个示例中,冒号在第二个示例中。
更新:
看起来这是一个相对简单的问题,有很多复杂的地方。
人们可能会想要一些TextBlocks,第一个包含目标文本,另外两个显示":“和"...:”,并根据第一个TextBlock是否有足够的空间显示其所有文本在可见性值之间进行转换。这是有可能的,但也有可能导致布局不稳定。
在刚刚实现了一个自定义面板之后,我可以想象一个可能的解决方案,其中一个设计用来容纳三个孩子,这将是上面描述的三个TextBlocks
从panel继承的自定义面板应重写两个关键方法: Measure和Arrange。
在测量方法中,所有的孩子都应该被测量。
在arrange方法中,检查是否有足够的空间来显示前两个子级,如果有,则将它们并排放置。如果没有足够的空间,则显示第一个孩子的大小以允许显示第三个孩子的房间,并将第三个孩子设置为右对齐。
更新:
我尝试了自定义面板,它工作,除了第一个TextBox是剪辑部分字符。
干净格式化的最终解决方案是这样一种方法:调整显示字符串,直到适合所分配的空间,并应用适当的后缀。
发布于 2020-12-03 09:12:18
如果字符串中不包括冒号,则可以使用Binding.StringFormat
<TextBlock Text="{Binding, StringFormat={}{0}:}" TextTrimming="CharacterEllipsis"/>(我意识到这是一个非常古老的问题,但我碰巧发现了它,所以我想我应该把这个问题抛给其他关注它的人。)
https://stackoverflow.com/questions/9630548
复制相似问题